java解析多層嵌套json字符串問題_第1頁
java解析多層嵌套json字符串問題_第2頁
java解析多層嵌套json字符串問題_第3頁
java解析多層嵌套json字符串問題_第4頁
java解析多層嵌套json字符串問題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論