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-----------------------------