Java將json對(duì)象轉(zhuǎn)換為map鍵值對(duì)案例詳解
本文的目的是把json串轉(zhuǎn)成map鍵值對(duì)存儲(chǔ),而且只存儲(chǔ)葉節(jié)點(diǎn)的數(shù)據(jù)
比如json數(shù)據(jù)如下:
{responseHeader:{status:0,QTime:0},spellcheck:{suggestions:{中國(guó):{numFound:9,startOffset:0,endOffset:2,suggestion:[中國(guó)工商銀行, 中國(guó)人民, 中國(guó)國(guó)際, 中國(guó)農(nóng)業(yè), 中國(guó)市場(chǎng), 中國(guó)經(jīng)濟(jì), 中國(guó)人, 中國(guó)廣播, 中國(guó)文化]}},collations:{collation:中國(guó)工商銀行}}}
如果存儲(chǔ)在鍵值對(duì)中,變成如下:
這樣通過map,可以直接獲取對(duì)應(yīng)鍵的數(shù)據(jù)。具體代碼如下:
import org.apache.solr.client.solrj.SolrServerException; import org.json.*; import java.io.IOException; import java.util.*; /** * @Author:sks * @Description: * @Date:Created in 16:18 2017/12/18 * @Modified by: **/ public class JsontoMap { /** * @Author:sks * @Description:把json對(duì)象數(shù)據(jù)存儲(chǔ)在map以鍵值對(duì)的形式存儲(chǔ),只存儲(chǔ)葉節(jié)點(diǎn) * @Date: */ private static void JsonToMap(Stack<JSONObject> stObj, Map<String, Object> resultMap) throws SolrServerException, IOException { if(stObj == null && stObj.pop() == null){ return ; } JSONObject json = stObj.pop(); Iterator it = json.keys(); while(it.hasNext()){ String key = (String) it.next(); //得到value的值 Object value = json.get(key); //System.out.println(value); if(value instanceof JSONObject) { stObj.push((JSONObject)value); //遞歸遍歷 JsonToMap(stObj,resultMap); } else { resultMap.put(key, value); } } } public static void main(String []args) throws SolrServerException, IOException{ String jsonStr ="{responseHeader:{status:0,QTime:0},spellcheck:{suggestions:{中國(guó):{numFound:9,startOffset:0,endOffset:2," + "suggestion:[中國(guó)工商銀行, 中國(guó)人民, 中國(guó)國(guó)際, 中國(guó)農(nóng)業(yè), 中國(guó)市場(chǎng), 中國(guó)經(jīng)濟(jì), 中國(guó)人, 中國(guó)廣播, 中國(guó)文化]}}," + "collations:{collation:中國(guó)工商銀行}}}"; JSONObject obj = new JSONObject(jsonStr); Stack<JSONObject> stObj = new Stack<JSONObject>(); stObj.push(obj); Map<String, Object> resultMap =new HashMap<String, Object>(); JsonToMap(stObj,resultMap); Set<String> keys = resultMap.keySet(); for (String key:keys){ System.out.println(key+":"+resultMap.get(key)); } } // 輸出: // endOffset:2 // startOffset:0 // QTime:0 // numFound:9 // suggestion:["中國(guó)工商銀行","中國(guó)人民","中國(guó)國(guó)際","中國(guó)農(nóng)業(yè)","中國(guó)市場(chǎng)","中國(guó)經(jīng)濟(jì)","中國(guó)人","中國(guó)廣播","中國(guó)文化"] // collation:中國(guó)工商銀行 // status:0 }
到此這篇關(guān)于Java將json對(duì)象轉(zhuǎn)換為map鍵值對(duì)案例詳解的文章就介紹到這了,更多相關(guān)Java將json對(duì)象轉(zhuǎn)換為map鍵值對(duì)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA?DOC如何生成標(biāo)準(zhǔn)的JAVA?API文檔詳解
這篇文章主要給大家介紹了關(guān)于JAVA?DOC如何生成標(biāo)準(zhǔn)的JAVA?API文檔的相關(guān)資料,Javadoc是Sun公司提供的一種工具,它可以從程序源代碼中抽取類、方法、成員等注釋,然后形成一個(gè)和源代碼配套的API幫助文檔,需要的朋友可以參考下2024-06-06SpringBoot集成Redisson實(shí)現(xiàn)分布式鎖的方法示例
這篇文章主要介紹了SpringBoot集成Redisson實(shí)現(xiàn)分布式鎖的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10springboot實(shí)現(xiàn)返回視圖而不是string的方法
這篇文章主要介紹了springboot實(shí)現(xiàn)返回視圖而不是string的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01idea項(xiàng)目代碼打包為jar包的超詳細(xì)步驟
因?yàn)闃I(yè)務(wù)開發(fā)場(chǎng)景需要,將開發(fā)項(xiàng)目中的Java類打成一個(gè)jar包引入到外部工具中,下面這篇文章主要給大家介紹了關(guān)于idea項(xiàng)目代碼打包為jar包的相關(guān)資料,需要的朋友可以參考下2023-01-01親身體驗(yàn)Intellij?Idea從卡頓到順暢全過程
這篇文章主要介紹了親身體驗(yàn)Intellij?Idea從卡頓到順暢全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Java通過Lambda表達(dá)式實(shí)現(xiàn)簡(jiǎn)化代碼
我們?cè)诰帉懘a時(shí),常常會(huì)遇到代碼又長(zhǎng)又重復(fù)的情況,就像調(diào)用第3方服務(wù)時(shí),每個(gè)方法都差不多,?寫起來啰嗦,?改起來麻煩,?還容易改漏,所以本文就來用Lambda表達(dá)式簡(jiǎn)化一下代碼,希望對(duì)大家有所幫助2023-05-05SpringCloud Feign遠(yuǎn)程調(diào)用實(shí)現(xiàn)詳解
Feign是Netflix公司開發(fā)的一個(gè)聲明式的REST調(diào)用客戶端; Ribbon負(fù)載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進(jìn)行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似2022-11-11