




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第java解析多層嵌套json字符串問題目錄java分別解析下面兩個json字符串嵌套(任意層)JSON解析轉(zhuǎn)換為Map源代碼
java分別解析下面兩個json字符串
packagejansonDemo;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.JSONArray;
importcom.alibaba.fastjson.JSONObject;
publicclassTestJSON{
*JSON實際上也是鍵值對("key":"value")
*key必須是字符串,value可以是合法的JSON數(shù)據(jù)類型(字符串,數(shù)字,對象,數(shù)組,布爾值或null)
*value如果是字符串,用jsonobj.getString("key")獲取
*value如果是數(shù)字,用jsonobj.getIntValue("key"),jsonobj.getFloatValue("key"),jsonobj.getInteger("key")等基本數(shù)據(jù)類型及其包裝類的方法獲取
*value如果是布爾值,用jsonobj.getBoolean("key"),jsonobj.getBooleanValue("key")獲取
*value如果是數(shù)組,用jsonobj.getJSONArray("key")獲取
*value如果是Object對象,用jsonobj.get("key"),獲取
*value如果是JSONObject對象,用jsonobj.getJSONObject("key")獲取
*該方法用于將已有的json字符串轉(zhuǎn)換為json對象,并取出該對象中相應(yīng)的key對應(yīng)的value值
*將已有的字符串轉(zhuǎn)換成jsonobject,用JSON.parseObject(jsonStr)方法
*json中只要是{}就代表一個JSONObject,[]就代表一個JSONArray
*獲取JSONObject對象用JSONObjectjsonobject.getJSONObject("key")方法
*獲取JSONArray對象用JSONObjectjsonobject.getJSONArray("key")方法
privatestaticvoidstrWritedToJSONObject(){
//以下是一個json對象中嵌套一個json子對象
StringmyJsonObj="{\n"+
"\"name\":\"runoob\",\n"+
"\"alexa\":10000,\n"+
"\"sites\":{\n"+
"\"site1\":\"\",\n"+
"\"site2\":\"\",\n"+
"\"site3\":\"\"\n"+
"}\n"+
"}";
JSONObjectjsonobj=JSON.parseObject(myJsonObj);//將json字符串轉(zhuǎn)換成jsonObject對象
/***獲取JSONObject中每個key對應(yīng)的value值時,可以根據(jù)實際場景中想得到什么類型就分別運用不到的方法***/
System.out.println(jsonobj.get("name"));//取出name對應(yīng)的value值,得到的是一個object
System.out.println(jsonobj.getString("name"));//取出name對應(yīng)的value值,得到的是一個String
System.out.println(jsonobj.getIntValue("alexa"));//取出name對應(yīng)的value值,得到的是一個int
System.out.println(jsonobj.get("sites"));//取出sites對應(yīng)的value值,得到的是一個object
System.out.println(jsonobj.getString("sites"));
System.out.println(jsonobj.getJSONObject("sites"));//取出sites對應(yīng)的value值,得到一個JSONObject子對象
System.out.println(jsonobj.getJSONObject("sites").getString("site2"));//取出嵌套的JSONObject子對象中site2對應(yīng)的value值,必須用getJSONObject()先獲取JSONObject
*以下是一個json對象中包含數(shù)組,數(shù)組中又包含json子對象和子數(shù)組
StringmyJsonObj2="{\n"+
"\"name\":\"網(wǎng)站\",\n"+
"\"num\":3,\n"+
"\"sites\":[\n"+
"{\"name\":\"Google\",\"info\":[\"Android\",\"Google搜索\",\"Google翻譯\"]},\n"+
"{\"name\":\"Runoob\",\"info\":[\"菜鳥教程\",\"菜鳥工具\",\"菜鳥微信\"]},\n"+
"{\"name\":\"Taobao\",\"info\":[\"淘寶\",\"網(wǎng)購\"]}\n"+
"]\n"+
"}";
JSONObjectjsonobj2=JSON.parseObject(myJsonObj2);//將json字符串轉(zhuǎn)換成jsonObject對象
System.out.println(jsonobj2.get("sites"));
System.out.println(jsonobj2.getString("sites"));
System.out.println(jsonobj2.getJSONArray("sites"));//取出sites對應(yīng)的value值,得到一個JSONOArray對象
//System.out.println(jsonobj2.getJSONObject("sites"));不能用該方法,因為sites是一個JSONOArray對象
//取出json對象中sites對應(yīng)數(shù)組中第一個json子對象的值
System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0));//得到結(jié)果:{"name":"Google","info":["Android","Google搜索","Google翻譯"]}
System.out.println(jsonobj2.getJSONArray("sites").get(0));
System.out.println(jsonobj2.getJSONArray("sites").getString(0));
//取出json對象中sites對應(yīng)數(shù)組中第一個json子對象下面info對應(yīng)的嵌套子數(shù)組值
System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info"));//得到結(jié)果:["Android","Google搜索","Google翻譯"]
//取出json對象中sites對應(yīng)數(shù)組中第一個json子對象下面info對應(yīng)的嵌套子數(shù)組中第二個值
System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info").getString(1));//得到結(jié)果:Google搜索
//依次取出json對象中sites對應(yīng)數(shù)組中的值
JSONArrayarray=jsonobj2.getJSONArray("sites");
getJsonArrayItem(array);
//依次取出json對象中sites對應(yīng)數(shù)組中第二個json子對象下面info對應(yīng)的嵌套子數(shù)組值
JSONArrayarr=jsonobj2.getJSONArray("sites").getJSONObject(1).getJSONArray("info");
getJsonArrayItem(arr);
*手動添加對象到一個JSONObject
privatestaticvoidwriteStrToJSONObject(){
JSONObjectjsonObject=newJSONObject();
jsonObject.put("name","tom");
jsonObject.put("age",20);
JSONArrayjsonArray=newJSONArray();
JSONObjectjsonArrayObject1=newJSONObject();
jsonArrayObject1.put("name","alibaba");
jsonArrayObject1.put("info","");
JSONObjectjsonArrayObject2=newJSONObject();
jsonArrayObject2.put("name","baidu");
jsonArrayObject2.put("info","");
jsonArray.add(jsonArrayObject1);
jsonArray.add(jsonArrayObject2);
jsonObject.put("sites",jsonArray);
System.out.println(jsonObject);
*將字符串轉(zhuǎn)為JSONArray
privatestaticvoidstrToJsonArray(){
StringarrayStr="[\n"+
"{\n"+
"\"name\":\"alibaba\",\n"+
"\"info\":\"\"\n"+
"},\n"+
"{\n"+
"\"name\":\"baidu\",\n"+
"\"info\":\"\"\n"+
"}\n"+
"]";
JSONArrayarray=JSON.parseArray(arrayStr);
System.out.println(array);
*依次取出JSONArray中的值
privatestaticvoidgetJsonArrayItem(JSONArrayarray){
for(inti=0;iarray.size();i++){
System.out.println(array.get(i));
//測試類
publicstaticvoidmain(String[]args){
strWritedToJSONObject();
//writeStrToJSONObject();
//strToJsonArray();
嵌套(任意層)JSON解析轉(zhuǎn)換為Map
最近需要檢驗系統(tǒng)多次返回的json結(jié)果是否相同,以保證系統(tǒng)升級后的功能一致,所以產(chǎn)生了編寫json轉(zhuǎn)換程序的需求。
由于小弟編程能力尚淺,有些特殊情況的轉(zhuǎn)換沒能考慮好,希望各位可以提出,或者貼出更完善的解析程序供大家分享,先在此處拋磚引玉了。
以下程序用于把多層嵌套的json字符串轉(zhuǎn)換為平層的Map,以方便在后續(xù)的測試程序中對比結(jié)果。
源代碼
importnet.sf.json.JSONArray;
importnet.sf.json.JSONObject;
importjava.util.*;
importjava.util.Map.Entry;
*Createdbychenyuzhion17-8-12.
publicclassJsonParseUtil{
publicstaticStringcheckFormat(Stringstr){
String_str=str.trim();
if(_str.startsWith("[")_str.endsWith("]")){
return_str.substring(1,_str.length()-1);
return_str;
*打印Map中的數(shù)據(jù)
*@parammap
publicstaticvoidprintJsonMap(Mapmap){
SetentrySet=map.entrySet();
IteratorMap.EntryString,Objectit=entrySet.iterator();
//最外層提取
while(it.hasNext()){
Map.EntryString,Objecte=it.next();
System.out.println("Key值:"+e.getKey()+"Value值:"+e.getValue());
*JSON類型的字符串轉(zhuǎn)換成Map
publicstaticvoidparseJSON2Map(MapjsonMap,StringjsonStr,StringparentKey){
//字符串轉(zhuǎn)換成JSON對象
JSONObjectjson=JSONObject.fromObject(jsonStr);
//最外層JSON解析
for(Objectk:json.keySet()){
//JSONObject實際上相當于一個Map集合,所以我們可以通過Key值獲取Value
Objectv=json.get(k);
//構(gòu)造一個包含上層keyName的完整keyName
StringfullKey=(null==parentKey||parentKey.trim().equals("")k.toString():parentKey+"."+k);
if(vinstanceofJSONArray){
//如果內(nèi)層還是數(shù)組的話,繼續(xù)解析
Iteratorit=((JSONArray)v).iterator();
while(it.hasNext()){
JSONObjectjson2=(JSONObject)it.next();
parseJSON2Map(jsonMap,json2.toString(),fullKey);
}elseif(isNested(v)){
parseJSON2Map(jsonMap,v.toString(),fullKey);
else{
jsonMap.put(fullKey,v);
publicstaticbooleanisNested(ObjectjsonObj){
returnjsonObj.toString().contains("{");
publicstaticvoidprintln(Objectstr){
System.out.println(str);
測試程序:
importnet.sf.json.JSONArray;
importnet.sf.json.JSONObject;
importjava.util.*;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品外協(xié)加工合同范例
- 醫(yī)院信息系統(tǒng)安全防御與響應(yīng)
- 浙江省錢塘聯(lián)盟2024-2025學(xué)年高一下學(xué)期4月期中聯(lián)考試題 語文 PDF版含答案
- 從商業(yè)角度看如何利用區(qū)塊鏈技術(shù)推動企業(yè)變革
- 供熱材料合同范例
- 區(qū)塊鏈技術(shù)助力醫(yī)療供應(yīng)鏈優(yōu)化
- 兌快遞合同范例
- Ⅰ型腎小管性酸中毒的臨床護理
- 公司文秘個人工作總結(jié)報告3篇
- 個人跟公司合作合同范例
- 強基計劃語文試題及答案
- 2025四川資源集團招聘134人查看職位筆試參考題庫附帶答案詳解
- 2024年佛山市順德區(qū)公辦中小學(xué)招聘教師真題
- 2025至2030中國玻尿酸市場前景預(yù)判及未來消費規(guī)模調(diào)研報告
- 2025-2030中國船舶行業(yè)發(fā)展分析及發(fā)展前景與投資研究報告
- 耐藥菌耐藥性監(jiān)測策略-全面剖析
- 2025年中國陳皮市場調(diào)查研究報告
- 2024年農(nóng)藝師考試考試形式試題及答案
- 老年綜合評估技術(shù)應(yīng)用中國專家共識解讀
- 北京市通州區(qū)2025年初中學(xué)業(yè)水平模擬考試(一模)英語試卷(含答案)
- 手術(shù)中大出血搶救流程
評論
0/150
提交評論