fastjson如何判断JSONObject和JSONArray
1、fastjson如何判断JSONObject和JSONArray,百度一下,教程还真不少,但是是阿里的fastjson的我是没有找到合适的方法。这里用一个还算可以的方法,算是实现了这个效果。
网上贴代码,有时候不把引入的包贴上去,自己使用的话还真不知道是导入那个包咧。
maven依赖的如下所示:
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.</version>
</dependency>
实现代码如下所示:
例子主要实现的是解析第一层,然后解析第二层,解析第二层的时候判断是否是JSONArray还是JSONObject类型的。最后我是直接输出的,你肯定是将解析出的信息进行其他操作,这里不做叙述了。
package com.fline.aic.utils; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; public class FastJosnUtils { /**
* FastJSON
*/
public static void fastJson() {
// 1、Json字符串,JSONObject类型的
// String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
// + " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
// + " \"condition\": \"null\",\r\n" + " \"data\": {\r\n" + " \"DataSource\": \"'P33'\",\r\n"
// + " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
// + " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
// + " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
// + " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
// + " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
// + " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
// + " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
// + " }\r\n" + "}"; // 1、Json字符串,JSONArray类型的
String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
+ " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
+ " \"condition\": \"null\",\r\n" + " \"data\": [{\r\n" + " \"DataSource\": \"'P33'\",\r\n"
+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
+ " },{\r\n" +
" \"DataSource\": \"'P33'\",\r\n" +
" \"DataStamp\": \"'2018-08-25'\",\r\n" +
" \"GovScCode\": \"'aaa'\",\r\n" +
" \"OperEffDate\": \"'2018-05-02'\",\r\n" +
" \"OrgCode\": \"'ww'\",\r\n" +
" \"OrgDesc\": \"'ss'\",\r\n" +
" \"OrgId\": \"1\",\r\n" +
" \"OrgName\": \"'11111'\",\r\n" +
" \"OrgSeq\": \"11\",\r\n" +
" \"OrgShortName\": \"'ss'\",\r\n" +
" \"OrgStatus\": \"'ss'\",\r\n" +
" \"OrgType\": \"'ss'\",\r\n" +
" \"ParentOrgId\": \"0\",\r\n" +
" \"RegAddress\": \"'ww'\",\r\n" +
" \"RegDate\": \"\",\r\n" +
" \"RegionId\": \"1\"\r\n" +
" }]\r\n" + "}";
// 解析第一层{},由于多种json写到了一起,所以直接引用到了包,自行开发引用自己的Json包就行。
JSONObject jsonObject = JSONObject.parseObject(message);
String catalogId = jsonObject.getString("catalogId");
String schemaTableName = jsonObject.getString("tableName");
String type = jsonObject.getString("type");
String condition = jsonObject.getString("condition");
System.out.println("{catalogId :" + catalogId + ", schemaTableName: " + schemaTableName + ", type: " + type
+ ", condition:" + condition + "}"); // 解析第二层,如果根据需求可以判断是否是JSONObject还是JSONArray
JSONArray jsonArray = new JSONArray();
JSONObject jsonData = new JSONObject();
String data = jsonObject.getString("data");
//百度了很对,也没有找到合适的,我是这样判断的是否是JSONArray还是JSONObject
if (data.contains("[") && data.contains("]")) {
jsonArray = JSONArray.parseArray(data);
System.out.println("jsonArray: " + jsonArray);
//然后可以解析第二层
for(int i=;i< jsonArray.size();i++) {
JSONObject jsonArrayObject = (JSONObject) jsonArray.get(i);
String DataSource = jsonArrayObject.getString("DataSource");
String DataStamp = jsonArrayObject.getString("DataStamp");
String OrgName = jsonArrayObject.getString("OrgName");
String RegAddress = jsonArrayObject.getString("RegAddress");
//...等等字段
System.out.println("{DataSource: "+DataSource +", DataStamp: " + DataStamp + ", OrgName: " +OrgName +", RegAddress: " + RegAddress);
} } else {
jsonData = JSONObject.parseObject(data);
System.out.println("jsonData: " + jsonData);
//然后可以解析第二层
String DataSource = jsonData.getString("DataSource");
String DataStamp = jsonData.getString("DataStamp");
String OrgName = jsonData.getString("OrgName");
String RegAddress = jsonData.getString("RegAddress");
//...等等字段
System.out.println("{DataSource: "+DataSource +", DataStamp: " + DataStamp + ", OrgName: " +OrgName +", RegAddress: " + RegAddress);
}
} public static void main(String[] args) {
fastJson(); }
}
2、JSON官方的判断json字符串是JSONArray还是JSONObject类型的。是这个样子搞得,百度一下,教程还是很多的。这里也简单贴一下。
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version></version>
</dependency>
案例代码如下所示:
package com.fline.aic.utils; import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener; public class OrgJsonUtils { /**
* 单层的orgJson判断是否是JSONObject还是JSONArray.
*/
public static void simpleJSONObjectOrgJson() {
String message = "[{\r\n" + " \"DataSource\": \"'P33'\",\r\n"
+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
+ " }]";
Object json = new JSONTokener(message).nextValue();
if (json instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) json;
System.out.println(jsonObject);
//自行解析即可
} else if (json instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) json;
System.out.println(jsonArray);
//自行解析即可
}
} /**
* 单层的orgJson判断是否是JSONObject还是JSONArray.
*/
public static void simpleJSONArrayOrgJson() {
String message = "{\r\n" + " \"DataSource\": \"'P33'\",\r\n"
+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
+ " }";
Object json = new JSONTokener(message).nextValue();
if (json instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) json;
System.out.println(jsonObject);
//自行解析即可
} else if (json instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) json;
System.out.println(jsonArray);
//自行解析即可
}
} /**
* JSON官方
*/
public static void doubleOrgJson() {
// Json字符串
/*
* String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n" +
* " \"tableName\": \"core_data.uc_gov_org\",\r\n" +
* " \"type\": \"POST\",\r\n" + " \"condition\": \"null\",\r\n" +
* " \"data\": {\r\n" + " \"DataSource\": \"'P33'\",\r\n" +
* " \"DataStamp\": \"'2018-08-25'\",\r\n" +
* " \"GovScCode\": \"'aaa'\",\r\n" +
* " \"OperEffDate\": \"'2018-05-02'\",\r\n" +
* " \"OrgCode\": \"'ww'\",\r\n" + " \"OrgDesc\": \"'ss'\",\r\n" +
* " \"OrgId\": \"1\",\r\n" + " \"OrgName\": \"'11111'\",\r\n" +
* " \"OrgSeq\": \"11\",\r\n" + " \"OrgShortName\": \"'ss'\",\r\n"
* + " \"OrgStatus\": \"'ss'\",\r\n" + " \"OrgType\": \"'ss'\",\r\n"
* + " \"ParentOrgId\": \"0\",\r\n" +
* " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" +
* " \"RegionId\": \"1\"\r\n" + " }\r\n" + "}";
*/ String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
+ " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
+ " \"condition\": \"null\",\r\n" + " \"data\": [{\r\n" + " \"DataSource\": \"'P33'\",\r\n"
+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
+ " }]\r\n" + "}";
// 解析第一层{}
JSONObject jsonObject = new JSONObject(message);
String catalogId = jsonObject.getString("catalogId");
String schemaTableName = jsonObject.getString("tableName");
String type = jsonObject.getString("type");
String condition = jsonObject.getString("condition");
System.out.println("{catalogId :" + catalogId + ", schemaTableName: " + schemaTableName + ", type: " + type
+ ", condition:" + condition + "}"); // 解析第二层,如果自己已经明确第二层是[]是JSONArray类型的,如下解析即可
JSONArray jsonArray2 = jsonObject.getJSONArray("data");
// 解析第二层,如果自己已经明确第二层是{}是JSONObject类型的,如下解析即可
// JSONObject jsonObject2 = jsonObject.getJSONObject("data"); for (int i = ; i < jsonArray2.length(); i++) {
JSONObject jsonArrayObject = (JSONObject) jsonArray2.get(i);
String DataSource = jsonArrayObject.getString("DataSource");
String DataStamp = jsonArrayObject.getString("DataStamp");
String OrgName = jsonArrayObject.getString("OrgName");
String RegAddress = jsonArrayObject.getString("RegAddress");
// ...等等字段
System.out.println("{DataSource: " + DataSource + ", DataStamp: " + DataStamp + ", OrgName: " + OrgName
+ ", RegAddress: " + RegAddress + "}");
}
} public static void main(String[] args) {
doubleOrgJson();
// simpleJSONObjectOrgJson();
// simpleJSONArrayOrgJson();
} }
GSON和jackson,我还未接触过,这里就不叙述了,百度也有很多教程。
待续.....
fastjson如何判断JSONObject和JSONArray的更多相关文章
- java判断jsonObject和jsonArray是否为空
resJsonObj = {"res":"0","msg":"","data":{"Nam ...
- Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断
1.Fastjson 我们通常在已知格式的情况下直接使用JSONObject,JSONArray,但是如果遇到需要判断格式呢? try{ Object object = JSON.parse(a); ...
- fastjson之JSONObject、JSONArray
JSONObject,JSONArray是JSON的两个子类. 首先我们来看JSONObject源码: 会发现JSONObject是继承Map<String, Object>,并且都是使用 ...
- Java学习-030-JSON 之四 -- 判断 JSONObject 是否包含键值对
前文对获取 JSON 数据封装方法,使之可通过类似于 cssSelector 的方法获取 JSON 数据,使获取数据变得简单.敬请参阅:模仿 cssSelector 封装读取 JSON 数据方法. 在 ...
- Gson基本操作,JsonObject,JsonArray,String,JavaBean,List互转
(转自)https://www.cnblogs.com/robbinluobo/p/7217387.html String.JsonObject.JavaBean 互相转换 User user = n ...
- JSONObject 和 JSONArray 的区别和用法
JSONObject 和 JSONArray 的数据表现形式不同: JSONObject的数据是用 { } 来表示的,例如: { "id" : "1", &q ...
- 011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List<Map<String,String>>的8种方法
一.JSON数据格式 1.1.常用JSON数据格式 1.对象方式:JSONObject的数据是用 { } 来表示的, 例如: { "id" : "123", & ...
- JsonObject、JsonArray操作json的个人总结
介绍 JsonObject.JsonArray之前,先介绍下JsonConfig JsonConfig: setClassMap(Map classMap)设置json属性类型,上json里的其中值为 ...
- json学习系列(6)JSONObject和JSONArray是JDK的集合部分延伸
我一直觉得JSONObject和JSONArray是JDK集合部分的延伸,它们与JDK的List和Map一脉相承.通过研究JSONObject和JSONArray的结构,我们顺便也复习一下JDK的内容 ...
随机推荐
- 基于ATT和CK™框架的开放式方法评估网络安全产品
场景 提供有关如何使用特定商业安全产品来检测已知对手行为的客观见解 提供有关安全产品和服务真实功能的透明度以检测已知的对手行为 推动安全供应商社区增强其检测已知对手行为的能力 地址 https://a ...
- 【转】python模块分析之typing(三)
[转]python模块分析之typing(三) 前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度 ...
- Go语言中的结构体 (struct)
Golang官方称Go语言的语法相对Java语言而言要简洁很多,但是简洁背后也灵活了很多,所以很多看似很简单的代码上的细节稍不注意就会产生坑.本文主要对struct结构体的相关的语法进行总结和说明. ...
- MySQL索引调优【转】
一.关于查询计划 其实,关于所有的关系型数据库中,在运行T-SQL语句的时候,在查询器进行编译运行的同时,都会有着自己的内部的一个优化过程,而这优化之后的产物就是:执行计划. 在SQL SERVER中 ...
- Kafka管理工具介绍【转】
Kafka内部提供了许多管理脚本,这些脚本都放在$KAFKA_HOME/bin目录下,而这些类的实现都是放在源码的kafka/core/src/main/scala/kafka/tools/路径下. ...
- python3之模块SMTP协议客户端与email邮件MIME对象
转载自https://www.cnblogs.com/zhangxinqi/p/9113859.html 阅读目录 1.smtplib模块的常用类与方法 2.处理邮件MIME 3.实例 (1)使用HT ...
- oracle procedure存储过程
1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS/AS 变量1 ; 变量2 DATE: BEG ...
- java 解压缩 中文名称问题
public List<String> unZip(String pathString, String zipPathString) { long startTime = System.c ...
- vue中更换.ico图标报错路径找不到图片
问题描述: vue项目中,想要更换.ico图片,更换完成后刷新页面报错,找不到路径. 解决: 更换完图片,重新启动下vue项目(npm run dev)就可以啦~ 哈哈哈 补充知识: 网页title旁 ...
- Redis持久化存储(AOF与RDB两种模式)
Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一 ...