java解析多层嵌套json字符串
生活随笔
收集整理的這篇文章主要介紹了
java解析多层嵌套json字符串
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
java解析多層嵌套json字符串
java分別解析下面兩個(gè)json字符串
package jansonDemo;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject;public class TestJSON {/*** JSON實(shí)際上也是鍵值對(duì)("key":"value")* key 必須是字符串,value 可以是合法的 JSON 數(shù)據(jù)類(lèi)型(字符串, 數(shù)字, 對(duì)象, 數(shù)組, 布爾值或 null)* value如果是字符串,用jsonobj.getString("key")獲取* value如果是數(shù) 字,用jsonobj.getIntValue("key"),jsonobj.getFloatValue("key"),jsonobj.getInteger("key")等基本數(shù)據(jù)類(lèi)型及其包裝類(lèi)的方法獲取* value如果是布爾值,用jsonobj.getBoolean("key"),jsonobj.getBooleanValue("key")獲取* value如果是數(shù) 組,用jsonobj.getJSONArray("key")獲取* value如果是Object對(duì)象,用jsonobj.get("key"),獲取* value如果是JSONObject對(duì)象,用jsonobj.getJSONObject("key")獲取*//*** 該方法用于將已有的json字符串轉(zhuǎn)換為json對(duì)象,并取出該對(duì)象中相應(yīng)的key對(duì)應(yīng)的value值* 將已有的字符串轉(zhuǎn)換成jsonobject,用JSON.parseObject(jsonStr)方法* json中只要是{}就代表一個(gè)JSONObject,[]就代表一個(gè)JSONArray* 獲取JSONObject對(duì)象用JSONObject jsonobject.getJSONObject("key")方法* 獲取JSONArray對(duì)象用JSONObject jsonobject.getJSONArray("key")方法*/private static void strWritedToJSONObject() {//以下是一個(gè)json對(duì)象中嵌套一個(gè)json子對(duì)象String myJsonObj = "{\n" +" \"name\":\"runoob\",\n" +" \"alexa\":10000,\n" +" \"sites\": {\n" +" \"site1\":\"www.runoob.com\",\n" +" \"site2\":\"m.runoob.com\",\n" +" \"site3\":\"c.runoob.com\"\n" +" }\n" +"}";JSONObject jsonobj = JSON.parseObject(myJsonObj); //將json字符串轉(zhuǎn)換成jsonObject對(duì)象/***獲取JSONObject中每個(gè)key對(duì)應(yīng)的value值時(shí),可以根據(jù)實(shí)際場(chǎng)景中想得到什么類(lèi)型就分別運(yùn)用不到的方法***/System.out.println(jsonobj.get("name")); //取出name對(duì)應(yīng)的value值,得到的是一個(gè)objectSystem.out.println(jsonobj.getString("name")); //取出name對(duì)應(yīng)的value值,得到的是一個(gè)StringSystem.out.println(jsonobj.getIntValue("alexa")); //取出name對(duì)應(yīng)的value值,得到的是一個(gè)intSystem.out.println(jsonobj.get("sites")); //取出sites對(duì)應(yīng)的value值,得到的是一個(gè)objectSystem.out.println(jsonobj.getString("sites"));System.out.println(jsonobj.getJSONObject("sites")); //取出sites對(duì)應(yīng)的value值,得到一個(gè)JSONObject子對(duì)象System.out.println(jsonobj.getJSONObject("sites").getString("site2")); //取出嵌套的JSONObject子對(duì)象中site2對(duì)應(yīng)的value值,必須用getJSONObject()先獲取JSONObject/*** 以下是一個(gè)json對(duì)象中包含數(shù)組,數(shù)組中又包含json子對(duì)象和子數(shù)組*/String myJsonObj2 = "{\n" +" \"name\":\"網(wǎng)站\",\n" +" \"num\":3,\n" +" \"sites\": [\n" +" { \"name\":\"Google\", \"info\":[ \"Android\", \"Google 搜索\", \"Google 翻譯\" ] },\n" +" { \"name\":\"Runoob\", \"info\":[ \"菜鳥(niǎo)教程\", \"菜鳥(niǎo)工具\(yùn)", \"菜鳥(niǎo)微信\" ] },\n" +" { \"name\":\"Taobao\", \"info\":[ \"淘寶\", \"網(wǎng)購(gòu)\" ] }\n" +" ]\n" +"}";JSONObject jsonobj2 = JSON.parseObject(myJsonObj2); //將json字符串轉(zhuǎn)換成jsonObject對(duì)象System.out.println(jsonobj2.get("sites"));System.out.println(jsonobj2.getString("sites"));System.out.println(jsonobj2.getJSONArray("sites")); //取出sites對(duì)應(yīng)的value值,得到一個(gè)JSONOArray對(duì)象//System.out.println(jsonobj2.getJSONObject("sites")); 不能用該方法,因?yàn)閟ites是一個(gè)JSONOArray對(duì)象//取出json對(duì)象中sites對(duì)應(yīng)數(shù)組中第一個(gè)json子對(duì)象的值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對(duì)象中sites對(duì)應(yīng)數(shù)組中第一個(gè)json子對(duì)象下面info對(duì)應(yīng)的嵌套子數(shù)組值System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info")); //得到結(jié)果:["Android","Google 搜索","Google 翻譯"]//取出json對(duì)象中sites對(duì)應(yīng)數(shù)組中第一個(gè)json子對(duì)象下面info對(duì)應(yīng)的嵌套子數(shù)組中第二個(gè)值System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info").getString(1)); //得到結(jié)果:Google 搜索//依次取出json對(duì)象中sites對(duì)應(yīng)數(shù)組中的值JSONArray array = jsonobj2.getJSONArray("sites");getJsonArrayItem(array);//依次取出json對(duì)象中sites對(duì)應(yīng)數(shù)組中第二個(gè)json子對(duì)象下面info對(duì)應(yīng)的嵌套子數(shù)組值JSONArray arr = jsonobj2.getJSONArray("sites").getJSONObject(1).getJSONArray("info");getJsonArrayItem(arr);}/*** 手動(dòng)添加對(duì)象到一個(gè)JSONObject*/private static void writeStrToJSONObject() {JSONObject jsonObject = new JSONObject();jsonObject.put("name","tom");jsonObject.put("age",20);JSONArray jsonArray = new JSONArray();JSONObject jsonArrayObject1 = new JSONObject();jsonArrayObject1.put("name","alibaba");jsonArrayObject1.put("info","www.alibaba.com");JSONObject jsonArrayObject2 = new JSONObject();jsonArrayObject2.put("name","baidu");jsonArrayObject2.put("info","www.baidu.com");jsonArray.add(jsonArrayObject1);jsonArray.add(jsonArrayObject2);jsonObject.put("sites",jsonArray);System.out.println(jsonObject);}/*** 將字符串轉(zhuǎn)為JSONArray*/private static void strToJsonArray() {String arrayStr = "[\n" +" {\n" +" \"name\":\"alibaba\",\n" +" \"info\":\"www.alibaba.com\"\n" +" },\n" +" {\n" +" \"name\":\"baidu\",\n" +" \"info\":\"www.baidu.com\"\n" +" }\n" +" ]";JSONArray array = JSON.parseArray(arrayStr);System.out.println(array);}/*** 依次取出JSONArray中的值*/private static void getJsonArrayItem(JSONArray array) {for (int i=0; i<array.size(); i++) {System.out.println(array.get(i));}}//測(cè)試類(lèi)public static void main(String[] args) {strWritedToJSONObject();//writeStrToJSONObject();//strToJsonArray();}}總結(jié)
以上是生活随笔為你收集整理的java解析多层嵌套json字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vue-router详尽:编程式导航、路
- 下一篇: rust(10)-函数指针