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ì)中,變成如下:

這樣通過(guò)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)文章
springboot健康檢查監(jiān)控全過(guò)程
文章介紹了Spring Boot如何使用Actuator和Micrometer進(jìn)行健康檢查和監(jiān)控,通過(guò)配置和自定義健康指示器,開(kāi)發(fā)者可以實(shí)時(shí)監(jiān)控應(yīng)用組件的狀態(tài),Micrometer支持多種監(jiān)控系統(tǒng),如Prometheus,而Grafana則用于可視化監(jiān)控?cái)?shù)據(jù),文章還提供了配置示例和常見(jiàn)問(wèn)題解決方案2025-01-01
javabean servlet jsp實(shí)現(xiàn)分頁(yè)功能代碼解析
這篇文章主要為大家詳細(xì)解析了javabean servlet jsp實(shí)現(xiàn)分頁(yè)功能代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Java項(xiàng)目實(shí)現(xiàn)模擬ATM機(jī)
這篇文章主要為大家詳細(xì)介紹了Java項(xiàng)目實(shí)現(xiàn)模擬ATM機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
Java面試題之HashMap 的 hash 方法原理是什么
那天,小二去蔚來(lái)面試,面試官老王一上來(lái)就問(wèn)他:HashMap 的 hash 方法的原理是什么?當(dāng)時(shí)就把裸面的小二給蚌埠住了,這篇文章將詳細(xì)解答該題目2021-11-11
Java?Cookie與Session實(shí)現(xiàn)會(huì)話跟蹤詳解
session的工作原理和cookie非常類似,在cookie中存放一個(gè)sessionID,真實(shí)的數(shù)據(jù)存放在服務(wù)器端,客戶端每次發(fā)送請(qǐng)求的時(shí)候帶上sessionID,服務(wù)端根據(jù)sessionID進(jìn)行數(shù)據(jù)的響應(yīng)2022-11-11
SpringCloud環(huán)境搭建過(guò)程之Rest使用小結(jié)
這篇文章主要介紹了SpringCloud環(huán)境搭建之Rest使用,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
Mybatis報(bào)錯(cuò)mapkey is required問(wèn)題及解決
這篇文章主要介紹了Mybatis報(bào)錯(cuò)mapkey is required問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06

