com.alibaba.fastjson和net.sf.json的区别
JSON有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构
1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
一、使用fastjson
1、到mvn(https://mvnrepository.com)库中引入
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency>
2、使用fastjson api
public static final Object parse(String text); // 把JSON字符串parse为JSONObject或者JSONArray public static final JSONObject parseObject(String text); // 把JSON字符串parse成JSONObject,注意的是,json字符串与json对象是不一样的 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。
案例:
测试类
package com.sanyouhome.json; import java.util.List; class Hobby{ private Long itemId; private String itemName; public Long getItemId() { return itemId; } public void setItemId(Long itemId) { this.itemId = itemId; } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } }
public class Boss { private Long id; private String name; private List<Hobby> hobby; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Hobby> getHobby() { return hobby; } public void setHobby(List<Hobby> hobby) { this.hobby = hobby; } @Override public String toString() { return "Boss{" + "id=" + id + ", name='" + name + '\'' + ", hobby=" + hobby + '}'; } }
测试方法
//定义json字符串 String jsonStr = "{\"id\":\"10\",\"name\":\"chrchr\",\"hobby\":[{\"itemId\":\"20\",\"itemName\":\"篮球\"},{\"itemId\":\"21\",\"itemName\":\"游泳\"}]}"; //将json字符串转成json对象,parseObject JSONObject jsonObject = JSON.parseObject(jsonStr); //System.out.println(jsonObject.toString()); //将json对象转成java对象,toJavaObject,参数1【json对象】,参数2 【javaBean】 Boss boss1 = JSON.toJavaObject(jsonObject, Boss.class); //System.out.println(boss1.toString()); //将json字符串转成java对象,parseObject,参数1【json字符串】,参数2【javaBean】 Boss boss2 = JSON.parseObject(jsonStr, Boss.class); //System.out.println(boss2.toString()); Boss boss3 = new Boss(); boss3.setId(1L); boss3.setName("chrchr"); Hobby hobby = new Hobby(); hobby.setItemId(30L); hobby.setItemName("lanqiu"); ArrayList<Hobby> hobbies = new ArrayList<>(); hobbies.add(hobby); boss3.setHobby(hobbies); //将java对象转成json对象,toJSONString JSONObject o = (JSONObject) JSON.toJSON(boss3); //System.out.println(o); //将java对象转成json字符串,toJSONString String s = JSONObject.toJSONString(boss3); //System.out.println(s); //将java对象转成json字符串,toJSONString String s1 = new JSONObject().toJSONString(boss3); //获取json对象中的某值,getString String name = jsonObject.getString("name"); System.out.println(name);
其中JSONObject是继承了JSON实现了Map<String, Object>,并且都是使用的Map中的方法。可以说JSONObject相当于Map<String, Object>
JSONObject extends JSON implements Map<String, Object>
JSONArray是继承了JSON实现List<Object>,并且都是使用的List中的方法。可以说JSONArray相当于List<Object>
JSONArray extends JSON implements List<Object>
3、使用net.sf.json.JSONObject
//json字符串、java对象、map转成JSONObject对象
JSONObject.fromObject(hashMap)
//json对象转换成java对象,并获取java对象属性 JSONObject.toBean(jsonStu, Student.class); jsonObj.toString()
//json数组字符串、list集合转成JSONArray数组类型对象
JSONArray.fromObject(arrayList)