详细介绍一下fastjson的ParserConfig,以及他的构造函数和属性方法
时间: 2024-03-29 14:38:50 浏览: 17
Fastjson是一个高性能的Java JSON处理库,它提供了一个ParserConfig类来配置JSON解析器的参数。
ParserConfig的构造函数是无参构造函数,它会初始化默认的配置参数。ParserConfig有以下常用属性方法:
1. addAccept("className"): 添加一个允许反序列化的类名,防止序列化攻击。
2. addDeny("className"): 添加一个不允许反序列化的类名,防止序列化攻击。
3. setAutoTypeSupport(boolean autoTypeSupport): 设置是否支持自动类型识别,默认为true。
4. setSafeMode(boolean safeMode): 设置是否启用安全模式,安全模式下,Fastjson会限制自动类型识别的类和包名,防止序列化攻击。
除了以上属性方法,ParserConfig还提供了一些用于缓存反射类信息的方法,以提高反序列化性能。例如:
1. getType(String className): 根据类名获取反射类信息。
2. putDeserializer(Type type, ObjectDeserializer deserializer): 添加一个反序列化器。
3. putDeserializer(Class<?> clazz, ObjectDeserializer deserializer): 添加一个反序列化器。
总之,ParserConfig提供了一些重要的配置参数和方法,可以帮助我们更好地控制JSON序列化和反序列化的过程。
相关问题
详细介绍一下fastjson里面的有限状态机
Fastjson是一个Java语言编写的高性能JSON处理库,其中有限状态机(Finite State Machine,FSM)是Fastjson中的一个重要的技术之一。
有限状态机是一种计算模型,它的状态数量是有限的,且每个状态都可以根据输入转换到其他状态。在Fastjson中,有限状态机被用来解析JSON字符串。
当Fastjson解析JSON字符串时,它首先会将JSON字符串转换为一个字符数组。接着,Fastjson使用有限状态机来逐个字符地扫描字符数组,并根据当前的状态和输入字符来转换到下一个状态。
在Fastjson中,有限状态机的状态包括:
1. START_OBJECT:表示当前正在解析一个JSON对象,即遇到了“{”字符。
2. OBJECT_KEY:表示当前正在解析一个JSON对象中的键名。
3. OBJECT_COLON:表示当前正在解析一个JSON对象中的键值对的冒号。
4. OBJECT_VALUE:表示当前正在解析一个JSON对象中的键值对的值。
5. START_ARRAY:表示当前正在解析一个JSON数组,即遇到了“[”字符。
6. ARRAY_VALUE:表示当前正在解析一个JSON数组中的元素值。
7. END:表示JSON字符串解析结束。
通过有限状态机,Fastjson能够高效地解析JSON字符串,并将其转换为Java对象。
详细讲解一下fastjson中JSON parse方法
Fastjson 中的 `JSON.parse()` 方法用于将 JSON 字符串解析为 Java 对象或者数组。该方法有多个重载形式,可以根据传入的参数类型不同返回不同的对象类型。
以下是 `JSON.parse()` 方法的几种常用形式:
1. 返回 JSONObject 对象
```java
public static JSONObject parseObject(String text);
public static JSONObject parseObject(String text, Feature... features);
public static JSONObject parseObject(String text, ParserConfig config);
public static JSONObject parseObject(String text, TypeReference<?> type, Feature... features);
```
示例:
```java
String jsonStr = "{\"name\":\"Tom\",\"age\":18,\"gender\":\"male\"}";
JSONObject jsonObj = JSON.parseObject(jsonStr);
```
2. 返回 JSONArray 对象
```java
public static JSONArray parseArray(String text);
public static JSONArray parseArray(String text, Feature... features);
public static JSONArray parseArray(String text, ParserConfig config);
public static <T> List<T> parseArray(String text, Class<T> clazz, Feature... features);
public static <T> List<T> parseArray(String text, TypeReference<T> type, Feature... features);
```
示例:
```java
String jsonStr = "[\"apple\",\"banana\",\"orange\"]";
JSONArray jsonArray = JSON.parseArray(jsonStr);
```
3. 返回指定类型的 Java 对象
```java
public static <T> T parseObject(String text, Class<T> clazz);
public static <T> T parseObject(String text, TypeReference<T> type, Feature... features);
```
示例:
```java
String jsonStr = "{\"name\":\"Tom\",\"age\":18,\"gender\":\"male\"}";
User user = JSON.parseObject(jsonStr, User.class);
```
其中,`User` 是一个自定义的 Java 类型。
4. 返回任意类型的 Java 对象
```java
public static <T> T parseObject(String text, Type type, Feature... features);
```
示例:
```java
String jsonStr = "{\"name\":\"Tom\",\"age\":18,\"gender\":\"male\"}";
Type userType = new TypeReference<User>(){}.getType();
User user = JSON.parseObject(jsonStr, userType);
```
其中,`TypeReference<User>(){}.getType()` 用于获取 `User` 类型的反射对象。
以上就是 `JSON.parse()` 方法的常用形式和示例。在使用时,可以根据需要选择不同的重载形式,以便正确地解析 JSON 字符串并转换为指定的 Java 对象类型。