1、fastjson如何判断JSONObject和JSONArray,百度一下,教程还真不少,但是是阿里的fastjson的我是没有找到合适的方法。这里用一个还算可以的方法,算是实现了这个效果。
网上贴代码,有时候不把引入的包贴上去,自己使用的话还真不知道是导入那个包咧。
maven依赖的如下所示:
1 23 com.alibaba 4fastjson 51.2.47 6
实现代码如下所示:
例子主要实现的是解析第一层,然后解析第二层,解析第二层的时候判断是否是JSONArray还是JSONObject类型的。最后我是直接输出的,你肯定是将解析出的信息进行其他操作,这里不做叙述了。
1 package com.fline.aic.utils; 2 3 import com.alibaba.fastjson.JSONArray; 4 import com.alibaba.fastjson.JSONObject; 5 6 public class FastJosnUtils { 7 8 /** 9 * FastJSON10 */11 public static void fastJson() {12 // 1、Json字符串,JSONObject类型的13 // String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"14 // + " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"15 // + " \"condition\": \"null\",\r\n" + " \"data\": {\r\n" + " \"DataSource\": \"'P33'\",\r\n"16 // + " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"17 // + " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"18 // + " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"19 // + " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"20 // + " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"21 // + " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"22 // + " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"23 // + " }\r\n" + "}";24 25 // 1、Json字符串,JSONArray类型的26 String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"27 + " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"28 + " \"condition\": \"null\",\r\n" + " \"data\": [{\r\n" + " \"DataSource\": \"'P33'\",\r\n"29 + " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"30 + " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"31 + " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"32 + " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"33 + " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"34 + " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"35 + " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"36 + " },{\r\n" + 37 " \"DataSource\": \"'P33'\",\r\n" + 38 " \"DataStamp\": \"'2018-08-25'\",\r\n" + 39 " \"GovScCode\": \"'aaa'\",\r\n" + 40 " \"OperEffDate\": \"'2018-05-02'\",\r\n" + 41 " \"OrgCode\": \"'ww'\",\r\n" + 42 " \"OrgDesc\": \"'ss'\",\r\n" + 43 " \"OrgId\": \"1\",\r\n" + 44 " \"OrgName\": \"'11111'\",\r\n" + 45 " \"OrgSeq\": \"11\",\r\n" + 46 " \"OrgShortName\": \"'ss'\",\r\n" + 47 " \"OrgStatus\": \"'ss'\",\r\n" + 48 " \"OrgType\": \"'ss'\",\r\n" + 49 " \"ParentOrgId\": \"0\",\r\n" + 50 " \"RegAddress\": \"'ww'\",\r\n" + 51 " \"RegDate\": \"\",\r\n" + 52 " \"RegionId\": \"1\"\r\n" + 53 " }]\r\n" + "}";54 // 解析第一层{},由于多种json写到了一起,所以直接引用到了包,自行开发引用自己的Json包就行。55 JSONObject jsonObject = JSONObject.parseObject(message);56 String catalogId = jsonObject.getString("catalogId");57 String schemaTableName = jsonObject.getString("tableName");58 String type = jsonObject.getString("type");59 String condition = jsonObject.getString("condition");60 System.out.println("{catalogId :" + catalogId + ", schemaTableName: " + schemaTableName + ", type: " + type61 + ", condition:" + condition + "}");62 63 // 解析第二层,如果根据需求可以判断是否是JSONObject还是JSONArray64 JSONArray jsonArray = new JSONArray();65 JSONObject jsonData = new JSONObject();66 String data = jsonObject.getString("data");67 //百度了很对,也没有找到合适的,我是这样判断的是否是JSONArray还是JSONObject68 if (data.contains("[") && data.contains("]")) {69 jsonArray = JSONArray.parseArray(data);70 System.out.println("jsonArray: " + jsonArray);71 //然后可以解析第二层72 for(int i=0;i< jsonArray.size();i++) {73 JSONObject jsonArrayObject = (JSONObject) jsonArray.get(i);74 String DataSource = jsonArrayObject.getString("DataSource");75 String DataStamp = jsonArrayObject.getString("DataStamp");76 String OrgName = jsonArrayObject.getString("OrgName");77 String RegAddress = jsonArrayObject.getString("RegAddress");78 //...等等字段79 System.out.println("{DataSource: "+DataSource +", DataStamp: " + DataStamp + ", OrgName: " +OrgName +", RegAddress: " + RegAddress);80 }81 82 } else {83 jsonData = JSONObject.parseObject(data);84 System.out.println("jsonData: " + jsonData);85 //然后可以解析第二层86 String DataSource = jsonData.getString("DataSource");87 String DataStamp = jsonData.getString("DataStamp");88 String OrgName = jsonData.getString("OrgName");89 String RegAddress = jsonData.getString("RegAddress");90 //...等等字段91 System.out.println("{DataSource: "+DataSource +", DataStamp: " + DataStamp + ", OrgName: " +OrgName +", RegAddress: " + RegAddress);92 }93 }94 95 public static void main(String[] args) {96 fastJson();97 98 }99 }
2、JSON官方的判断json字符串是JSONArray还是JSONObject类型的。是这个样子搞得,百度一下,教程还是很多的。这里也简单贴一下。
1 23 org.json 4json 520160810 6
案例代码如下所示:
1 package com.fline.aic.utils; 2 3 import org.json.JSONArray; 4 import org.json.JSONObject; 5 import org.json.JSONTokener; 6 7 public class OrgJsonUtils { 8 9 /** 10 * 单层的orgJson判断是否是JSONObject还是JSONArray. 11 */ 12 public static void simpleJSONObjectOrgJson() { 13 String message = "[{\r\n" + " \"DataSource\": \"'P33'\",\r\n" 14 + " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n" 15 + " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n" 16 + " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n" 17 + " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n" 18 + " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n" 19 + " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n" 20 + " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n" 21 + " }]"; 22 Object json = new JSONTokener(message).nextValue(); 23 if (json instanceof JSONObject) { 24 JSONObject jsonObject = (JSONObject) json; 25 System.out.println(jsonObject); 26 //自行解析即可 27 } else if (json instanceof JSONArray) { 28 JSONArray jsonArray = (JSONArray) json; 29 System.out.println(jsonArray); 30 //自行解析即可 31 } 32 } 33 34 /** 35 * 单层的orgJson判断是否是JSONObject还是JSONArray. 36 */ 37 public static void simpleJSONArrayOrgJson() { 38 String message = "{\r\n" + " \"DataSource\": \"'P33'\",\r\n" 39 + " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n" 40 + " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n" 41 + " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n" 42 + " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n" 43 + " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n" 44 + " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n" 45 + " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n" 46 + " }"; 47 Object json = new JSONTokener(message).nextValue(); 48 if (json instanceof JSONObject) { 49 JSONObject jsonObject = (JSONObject) json; 50 System.out.println(jsonObject); 51 //自行解析即可 52 } else if (json instanceof JSONArray) { 53 JSONArray jsonArray = (JSONArray) json; 54 System.out.println(jsonArray); 55 //自行解析即可 56 } 57 } 58 59 /** 60 * JSON官方 61 */ 62 public static void doubleOrgJson() { 63 // Json字符串 64 /* 65 * String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n" + 66 * " \"tableName\": \"core_data.uc_gov_org\",\r\n" + 67 * " \"type\": \"POST\",\r\n" + " \"condition\": \"null\",\r\n" + 68 * " \"data\": {\r\n" + " \"DataSource\": \"'P33'\",\r\n" + 69 * " \"DataStamp\": \"'2018-08-25'\",\r\n" + 70 * " \"GovScCode\": \"'aaa'\",\r\n" + 71 * " \"OperEffDate\": \"'2018-05-02'\",\r\n" + 72 * " \"OrgCode\": \"'ww'\",\r\n" + " \"OrgDesc\": \"'ss'\",\r\n" + 73 * " \"OrgId\": \"1\",\r\n" + " \"OrgName\": \"'11111'\",\r\n" + 74 * " \"OrgSeq\": \"11\",\r\n" + " \"OrgShortName\": \"'ss'\",\r\n" 75 * + " \"OrgStatus\": \"'ss'\",\r\n" + " \"OrgType\": \"'ss'\",\r\n" 76 * + " \"ParentOrgId\": \"0\",\r\n" + 77 * " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + 78 * " \"RegionId\": \"1\"\r\n" + " }\r\n" + "}"; 79 */ 80 81 String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n" 82 + " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n" 83 + " \"condition\": \"null\",\r\n" + " \"data\": [{\r\n" + " \"DataSource\": \"'P33'\",\r\n" 84 + " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n" 85 + " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n" 86 + " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n" 87 + " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n" 88 + " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n" 89 + " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n" 90 + " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n" 91 + " }]\r\n" + "}"; 92 // 解析第一层{} 93 JSONObject jsonObject = new JSONObject(message); 94 String catalogId = jsonObject.getString("catalogId"); 95 String schemaTableName = jsonObject.getString("tableName"); 96 String type = jsonObject.getString("type"); 97 String condition = jsonObject.getString("condition"); 98 System.out.println("{catalogId :" + catalogId + ", schemaTableName: " + schemaTableName + ", type: " + type 99 + ", condition:" + condition + "}");100 101 // 解析第二层,如果自己已经明确第二层是[]是JSONArray类型的,如下解析即可102 JSONArray jsonArray2 = jsonObject.getJSONArray("data");103 // 解析第二层,如果自己已经明确第二层是{}是JSONObject类型的,如下解析即可104 // JSONObject jsonObject2 = jsonObject.getJSONObject("data");105 106 107 for (int i = 0; i < jsonArray2.length(); i++) {108 JSONObject jsonArrayObject = (JSONObject) jsonArray2.get(i);109 String DataSource = jsonArrayObject.getString("DataSource");110 String DataStamp = jsonArrayObject.getString("DataStamp");111 String OrgName = jsonArrayObject.getString("OrgName");112 String RegAddress = jsonArrayObject.getString("RegAddress");113 // ...等等字段114 System.out.println("{DataSource: " + DataSource + ", DataStamp: " + DataStamp + ", OrgName: " + OrgName115 + ", RegAddress: " + RegAddress + "}");116 }117 }118 119 public static void main(String[] args) {120 doubleOrgJson();121 // simpleJSONObjectOrgJson();122 // simpleJSONArrayOrgJson();123 }124 125 }
GSON和jackson,我还未接触过,这里就不叙述了,百度也有很多教程。
待续.....