@JSONField
-
作用范围:field、setter、getter
-
进行操作时是感觉getter和setter进行的,不依据field
-
属性:
属性 作用 ordinal 配置序列化和反序列化的顺序 name 指定字段的名称 format 指定字段的格式,对日期格式有用 serialize 是否序列化 deserialize 是否反序列化 jsonDirect 当你有一个字段是字符串类型,里面是json格式数据,你希望直接输出,而不是经过转义后再输出 serializeUsing 定制属性序列化
@JSONGreator
- 作用范围:构造方法
- 当javabean没有默认构造方法,可用用来指定构造方法来创建java对象
@JSONPOJOBuilder
@JSONType
-
作用范围:类
-
与@JSONField类似
-
属性:
属性 作用 ignores 指定序列化时,不序列化的字段 includes 指定序列化时,序列化的字段 serialzeFeatures 策略
JSONPath
-
可用在java框架中当作对象查询语言(OQL)来使用
-
方法(静态):
方法名 作用 eval 求值 size 非空元素个数 contains 是否包含 containsValue 是否包含指定值 set 修改指定路径的值 array_add 在数组或者集合中添加元素 -
示例(对象):
//获取值 System.out.println(JSONPath.eval(user,"$.name")); //是否包含 System.out.println(JSONPath.contains(user,"$.name")); //是否包含指定值 System.out.println(JSONPath.containsValue(user,"$.name",user.getName())); //有值的字段数量 System.out.println(JSONPath.size(user,"$"));
-
示例(集合):
//获取下标1和2的元素 System.out.println(JSONPath.eval(list,"[1,2]")); //获取下标0到2的元素 System.out.println(JSONPath.eval(list,"[0:2]")); //获取指定元素集合 System.out.println(JSONPath.eval(list,"$.name")); //条件过滤 System.out.println(JSONPath.eval(list,"[id in (2)]")); System.out.println(JSONPath.eval(list,"[id = 3]"));
JSON
toJSONString()
-
将java对象转换成json字符串
-
示例:
User user = getUser(); String s = JSON.toJSONString(user); System.out.println(s);
writeJSONString()
-
将json字符串放入流中,支持outputStream/Writer
-
示例:
PrintWriter pw = new PrintWriter(System.out); User user = getUser(); JSON.writeJSONString(pw,user);
parseObject
-
将json传转成对象
-
示例:
User user = getUser(); String s = JSON.toJSONString(user); System.out.println(s); User user1 = JSON.parseObject(s, User.class); System.out.println(user1);
stream
JOSNWriter
-
如果你的json格式是一个巨大的数组,有很多元素
-
则先调用startArray,然后写入对象,然后endArray
-
示例:
JSONWriter writer = new JSONWriter(new FileWriter("F:\\array.json")); writer.startArray(); for (User user : getUsers()){ writer.writeValue(user); } writer.endArray(); writer.close();
-
如果你的json格式是一个巨大的对象,有很多key/value时
-
则先调用startObject,然后写入对象,然后endObject
-
示例:
JSONWriter writer = new JSONWriter(new FileWriter("F:\\object.json")); writer.startObject(); for (User user : getUsers()){ writer.writeKey("key"+user.getId()); writer.writeValue(user); } writer.endObject(); writer.close();
JSONReader
-
巨大对象json读取
-
示例:
JSONReader reader = new JSONReader(new FileReader("F:\\object.json")); reader.startObject(); while (reader.hasNext()){ String k = reader.readString(); User user = reader.readObject(User.class); System.out.println(k+":"+user); } reader.endObject();
-
巨大集合json读取
-
示例:
JSONReader reader = new JSONReader(new FileReader("F:\\array.json")); reader.startArray(); while (reader.hasNext()){ User user = reader.readObject(User.class); System.out.println(user); } reader.endArray();
ParseProcess
ExtraProcessor
- 用于处理多余字段
ExtraTypeProvicer
- 用于处理多余字段时提供类型信息
SerializeFilter
- 通过编程方式定制序列化
- 支持6中序列化方式
- PropertyPerFilter:根据属性名判断是否序列化
- PropertyFilter:根据属性名和值判断是否序列化
- NameFilter:修改key
- ValueFilter:修改value
- BeforeFilter:序列化时在最前添加的内容
- AfterFilter:序列化时在最后添加的内容
循环引用
-
引用是通过
“$ref”
来表示 -
描述
符号 作用 "$ref":".." 上一级 "$ref":"@" 当前对象,也就是自引用 "$ref":"$" 根对象 "$ref":"$.children.0" 基于路径的引用,相当于root.getChildren().get(0)
TypeReference
-
如果需要一个带泛型的对象,例如List<User>,Map<String,User>
-
示例:
Map<String, String> stringStringMap = JSON.parseObject(s, new TypeReference<Map<String, String>>() {});