fastjson如何判断JSONObject和JSONArray
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 * FastJSON 10 */ 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: " + type 61 + ", condition:" + condition + "}"); 62 63 // 解析第二层,如果根据需求可以判断是否是JSONObject还是JSONArray 64 JSONArray jsonArray = new JSONArray(); 65 JSONObject jsonData = new JSONObject(); 66 String data = jsonObject.getString("data"); 67 //百度了很对,也没有找到合适的,我是这样判断的是否是JSONArray还是JSONObject 68 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: " + OrgName 115 + ", RegAddress: " + RegAddress + "}"); 116 } 117 } 118 119 public static void main(String[] args) { 120 doubleOrgJson(); 121 // simpleJSONObjectOrgJson(); 122 // simpleJSONArrayOrgJson(); 123 } 124 125 }
GSON和jackson,我还未接触过,这里就不叙述了,百度也有很多教程。
待续.....
posted @ 2018-09-29 14:29 别先生 阅读( ...) 评论( ...) 编辑 收藏