fastjson 判断是否包含_Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断
1.Fastjson
我们通常在已知格式的情况下直接使用JSONObject,JSONArray,但是如果遇到需要判断格式呢?
try{
Object object=JSON.parse(a);if (object instanceofJSONObject){//JSONObject
}if (object instanceofJSONArray){//JSONArray
}
}catch(com.alibaba.fastjson.JSONException e){//非JSON字符串
}
2.org.json.JSON
直接使用JSON库做解析的情况不多,但是这里也稍微写一下
log.info(JSON.parse(jsonStr).getClass().getName());try{
Object json= newJSONTokener(jsonStr).nextValue();
log.info( json.getClass().toString());//json.toString();
if(json instanceofJSONObject){
log.info("is JSONObject");
JSONObject jsonObject=(JSONObject)json;//further actions on jsonObjects//...
}else if (json instanceofJSONArray){
log.info("is JSONArray");
JSONArray jsonArray=(JSONArray)json;//further actions on jsonArray//...
}
}catch(Exception e){
e.printStackTrace();
}
3.GSON,也是蛮强大的一个库,没有依赖包,只是在反射到Map的使用上有点麻烦。
GSON里面最有意思的就是JsonPrimitive,原始JSON。
先给代码
String str = "";
JsonParser jsonParser= newJsonParser();try{
JsonElement jsonElement=jsonParser.parse(str);
log.info("jsonElement "+jsonElement.getClass().getName());if(jsonElement.isJsonObject()){//JsonObject
log.info(jsonElement.getAsJsonObject().get("aa").getAsString());
}if(jsonElement.isJsonArray()){//JsonArray
log.info(jsonElement.getAsJsonArray().get(0).getAsJsonObject().get("aa").getAsString());
}if(jsonElement.isJsonNull()){//空字符串
log.info(jsonElement.getAsString());
}if(jsonElement.isJsonPrimitive()){
log.info(jsonElement.getAsString());
}
}catch(Exception e){//非法//e.printStackTrace();
log.info("非法 "+e.getMessage());
}
可知,GSON中定义了四个JSON类型,分别是JSONObject,JSONArray,JSONPrimitive,JSONNull。
但是官方对JSON的严格定义是{}为JSONObject,[]为JSONArray。
所以只用JsonElement jsonElement = jsonParser.parse(str);能正常解析的字符串并不意味着是一个合法的JSON,必须满足
jsonElement.isJsonObject()或者jsonElement.isJsonArray()。
另说一个题外话,关于对jsonElement.getAsJsonPrimitive()方法的理解。
JsonPrimitive即时指JSON value的原始数据,包含三种类型,数字,双引号包裹的字符串,布尔。
所以JsonPrimitive.toString得到的不是实际的值,而是JSON中的:后面的完整内容,需要再做一次getAs。
例如
String str = "{\"aa\":\"aa\"}";
JsonElement jsonElement=jsonParser.parse(str);
log.info(jsonElement.getAsJsonObject().get("aa").getAsString());
str= "{\"aa\":true}";
jsonElement=jsonParser.parse(str);
jsonElement.getAsJsonObject().get("aa").getAsBoolean();
str= "{\"aa\":1.2}";
jsonElement.getAsJsonObject().get("aa").getAsBigDecimal();
所以Gson还有一个好处就是自带转换为java常规类型。
fastjson 判断是否包含_Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断相关推荐
- android 读取json数据(遍历JSONObject和JSONArray)
android 读取json数据(遍历JSONObject和JSONArray) public String getJson(){ String jsonString = "{\" ...
- fastjson 判断是否包含_Fastjson爆出重大漏洞,攻击者可使整个业务瘫痪
360网络安全响应中心 https://cert.360.cn/warning/detail?id=82a509e4543433625d6fe4361b5802c9 报告编号:B6-2019-0905 ...
- fastjson转list嵌套_FastJson的学习之JSON互相转Map集合,List集合,JavaBean
https://blog.csdn.net/weixin_36910300/article/details/79182120 创建两个实体类 一个是部门类,一个是部门员工类 部门员工类 public ...
- Json格式的解析,JsonObject、JSONArray
1.将json字符串转成json格式 com.alibaba.fastjson.JSONObject object = JSONArray.parseObject(newJson); 2.根据属性获取 ...
- excel判断字符串包含另一个字符串_【前端冷知识】如何正确判断一个字符串是数值?...
在网页中,我们从用户输入的内容中获取的值通常是字符串,但是有时候我们希望用户输入的内容一定要能转成数值: <input id="userInput"> userInpu ...
- JSON对象中的JSONObject和JSONArray以及与Map、String、数组的转化
引用自:http://blog.csdn.net/bestcxx/article/details/50595464 String list array 转化为 json,利用的包如下: commons ...
- java怎么判断json是否为空_java判断jsonObject和jsonArray是否为空
resJsonObj = {"res":"0","msg":"","data":{"Nam ...
- fastjson解析多层数据_fastJson解析多层Json数据案例
这里咱们来实现一个获取接口数据存入数据库的案例html 例如数据:java { "code":200, "msg":"ok", ...
- jsonpath 判断是否包含_mysql json 判断某个key是否存在
我们知道mysql5.7开始就支持json字段的类型,很多时候用字段类型存数据会非常的方便. 今天我们探讨就是mysql跟json字段类型有关的查询,判断key是否存在. mysql提供了大量的处理j ...
最新文章
- 查看当前svn账户_SVN-基础教程学习
- python 递归遍历二叉树
- stmmac描述符的结构和初始化
- 【JAVA基础篇】对象初始化过程
- 2021年95后“他经济”研究报告
- Python解析pdf转为TXT格式
- PHP7实战开发简单CMS内容管理系统(11)批量删除栏目数据
- fpga供电电压偏低会怎样_正点原子【FPGA-开拓者】第三章 硬件资源详解
- 中去掉外键_【Java笔记】035天,MySQL中的增删改查
- Android开源框架ViewPageIndicator和ViewPager实现Tab导航
- excel下拉列表多选框_将列表框添加到Excel工作表
- cad怎么把图层英文变成中文_cad图层英文
- 什么是javabean及其用法(转)
- js 多线程Worker
- linux串行提交脚本,如何保证shell脚本串行执行
- HbuilderX 快捷键修改
- python使用matplotlib画折线图(详细)
- 全国计算机职称考试excel2003,全国计算机职称考试excel2003题库及答案.pdf
- Uefi ABL读取XBL设置的标志位
- Linux系统之CentOS和Ubuntu的对比