json小结

json小结:

Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。

下面是几个常用的 JSON 解析类库:

Gson: 谷歌开发的 JSON 库,功能十分全面。

FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。

Jackson: 社区十分活跃且更新速度很快。

简单使用样例,以FastJson举例:
后端生成的json字符串都是带双引号的,直接传输到前端页面,js无法解析此时后台需要先把双引号变为单引号
后台处理代码

JSONObject object = new JSONObject();
object.put("sbmc",parentSbmc);
object.put("sydId",sydbone.getId());
object.put("msg","");//msg用于更新,操作所在页面的数据
resString=object.toJSONString().replaceAll("\"", "\'");

//该行可以无视 [{'children':[{'name':'变电站03'}],'name':'500kV'},{'children':[{'name':'变电站02'},{'name':'变电站01'}],'name':'220kV'},{'children':[],'name':'otherkV'}]

 

//使用这个JSON.toJSONString方法时不用替换单双引号

List<Sydbone> byMainId = sydboneDao.getByMainId(Long.parseLong(sydbone.getWj()));
msg = JSON.toJSONString(byMainId).replaceAll("null", "");


前端处理代码

var jsonMsg = eval('(' + resString+ ')');
alert(jsonMsg.sydId);//可以直接使用对象.属性取值

tip:

数组的数组,还需要套一层eval函数,不然没法用each遍历

var yxData = jsonMsg.msg.yxData;
console.log(yxData);
$.each(eval('(' + yxData+ ')'),function(index,item){
console.log(item.yxmc);
});

 



-----------------------api----------------------

--Fastjson API
https://www.w3cschool.cn/fastjson/fastjson-api.html

fastJson 常用API使用
  Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject 
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); // 将JavaBean转换为JSONObject或者JSONArray。

 

-- gson API

https://www.cnblogs.com/baiqiantao/p/7512336.html

--net.sf.json API

http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/package-summary.html

net.sf.json 常用API使用
1. 字符串转JSONObject:
   JSONObject jsonObject = JSONObject.fromObject(string);
2. JSONObject 转实体类:
   ExtraParamVO extParamVo = (ExtraParamVO) JSONObject.toBean(jsonObject, ExtraParamVO.class);
3. 将java实体类转JSONObject
   Student stu1 = new Student("lwc", "111111"); 
    JSONObject jsonObject = JSONObject.fromObject(stu1); 
    System.out.println(jsonObject);  
4. list转数组:
    List list = new ArrayList(); 
    list.add(new Student("lwc", "111111")); 
   list.add(new Student("nxj", "222222")); 
    
JSONArray jsonArray = JSONArray.fromObject(list); 
    System.out.println(jsonArray);  
5. json字符串转list

    String jsondata = "[{\"password\":\"111111\",\"username\":\"lwc\"},{\"password\":\"222222\",\"username\":\"nxj\"}]";
     JSONArray jsonArray1 = JSONArray.fromObject(jsondata); 
       for (int i = 0; i < jsonArray1.size(); i++) {  
            JSONObject jsonObject2 = jsonArray1.getJSONObject(i); 
            Student stu2 = (Student) JSONObject.toBean(jsonObject2,Student.class);  
            list1.add(stu2);  
        }  
    System.out.println(list1);  

 

-----------------------------四种json  maven配置-----------------------------
实验结果:从效率上来讲,当数据量较小时,org.json  处理速度最快,当数据量较大时,com.alibaba.fastjson处理速度最快。
对比源码,显而易见org.json 的 JSONObject 的put()方法,不允许key和value为null,而阿里的fastjson是允许的。
第一种  org.json
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>
第二种  net.sf.json
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>
第三种  com.alibaba.fastjson
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>
第四种  com.google.code.gson
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

速度对比可看连接:
https://blog.csdn.net/qq_30490591/article/details/80931615?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3
-----------------------------FastJson-----------------------------
----编码
从 Java 变量到 JSON 使用put方法
JSONObject object = new JSONObject();
    //string
    object.put("string","string");
----解码
从 JSON 对象到 Java 变量使用getXXX(String key)方法
JSONObject object = JSONObject.parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"int\":2}");
  //string
  String s = object.getString("string");
  System.out.println(s);
  //int
  int i = object.getIntValue("int");
----JSON 对象与字符串的相互转化
JSON.parseObject()    从字符串解析 JSON 对象
JSON.parseArray()    从字符串解析 JSON 数组
JSON.toJSONString(obj/array)    将 JSON 对象或 JSON 数组转化为字符串
实例
//从字符串解析JSON对象
JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鸟教程\"}");
//从字符串解析JSON数组
JSONArray arr = JSON.parseArray("[\"菜鸟教程\",\"RUNOOB\"]\n");
//将JSON对象转化为字符串
String objStr = JSON.toJSONString(obj);
//将JSON数组转化为字符串
String arrStr = JSON.toJSONString(arr);

详细使用教程,看菜鸟教程
https://www.runoob.com/w3cnote/fastjson-intro.html
-----------------------------Gson-----------------------------

-----------------------------Jackson-----------------------------
posted @ 2020-04-30 10:49  爱跳舞的程序员  阅读(3)  评论(0编辑  收藏  举报