### 1、接口变化对照表（没变化的不在列）




| v3             | v4                               |     备注         |
|----------------|----------------------------------|--------------|
| loadObj(.)     | `ofBean(.)`                        | 加载 java bean |
| loadStr(.)      | `ofJson(.)`                        | 加载 json      |
| ary()            | `getArray()`                       | 获取数组形态             |
| obj()            | `getObject()`                      | 获取对象形态           |
| val()             | `getValue()`                       | 获取值形态           |
| | | |
| val(.)             | `setValue(.)`                       | 设置值（Json 支持的值类型）            |
| fill(.)              | `fill(.)`                                | 填充 java bean（可以是任何对象） |
| fillStr(.)          | `fillJson(.)`                         | 填充 json      |
| forEach(.)       | `getArray().forEach(.)`         | 遍历             |
|                      | `getObject().forEach(.)`       | 遍历             |
| toObject(.)      | `toBean(.)`                         | 转为 java bean |
| build(.)           | `then(slf->{})`                      | 然后（消费自己）             |
| getRawXxx()    | `getValue()`                       |              |
|                      | `getValueAs()`                     |              |
| count()           | `size()`                              |              |
| contains(.)      | `hasKey(.)`                        |              |
|                      | `hasValue(.)`                      |              |
| removeAt(.)     | `remove(.)`                        |              |
| attrGet(.)         | /                                      |              |
| attrSet(.)         | /                                      |              |
| attrForeach(.)   | /                                     |              |
| toData()           | `toBean()`                         |              |
| toObject()        | `toBean()`                         |              |
| toObjectList()   | `toBean(new TypeRef<List<T>>(){})`  |              |
| toArray()          | `toBean(new TypeRef<List<T>>(){})`  |              |
| -                    | -                                                   | -            |
| stringify(.)        | `serialize(.)`                                    | 序列化          |



### 2、特性变化对照表



| v3                                     | v4            | 备注         |
| ---------------------- | -------- | -------- |
| `QuoteFieldNames`              | /（默认有双引号）     | 输出:为字段名加引号     |
|  /（默认无引号）                 | `Write_UnquotedFieldNames`     | 输出:字段名不加引号     |
| `UseSingleQuotes`              | `Write_UseSingleQuotes`     | 输出:使用单引号输出     |
| `OrderedField`                     | /（默认有排序）     | 存储:排序字段     |
|                                          |            |          |
| `WriteClassName`                | `Write_ClassName`     | 输出:写入类名。反序列化是需用到     |
| `NotWriteRootClassName`     | `Write_NotRootClassName`     | 输出:不写入根类名     |
| `WriteArrayClassName`         | /     | 输出:写入数组类名。反序列化是需用到     |
| `WriteDateUseTicks`            | /（默认为 ticks）     | 输出:日期用Ticks     |
| `WriteDateUseFormat`          | `Write_UseDateFormat`     | 输出:日期用格式符控制     |
| `WriteBoolUse01`                | `Write_BooleanAsNumber`     | 输出:Bool用0或1替代     |
| `WriteNumberUseString`       | `Write_NumbersAsString`     | 输出：数字用字符串     |
| /                                       | `Write_BigNumbersAsString`     | 输出：大数字（long 或 double）用字符串。方便兼容JS     |
| /                                       | `Write_LongAsString`     | 输出：长整型用字符串     |
| `ParseIntegerUseLong`         | /     | 解析：整型使用长整     |
| `BrowserSecure`                  | /     | 输出:浏览器安全处理（不输出`<>`）     |
| `BrowserCompatible`           | `Write_BrowserCompatible`     | 输出:浏览器兼容处理（将中文都会序列化为`\uXXXX`格式，字节数会多一些）     |
| `TransferCompatible`           | /（默认不输出）                  | 输出：传输兼容处理（不输出\）     |
| /（默认输出）                     | `Write_UseRawBackslash`     | 输出：`\`     |
| `EnumUsingName`              | `Write_EnumUsingName`     | 输出:使用Enum的name输出     |
| `StringNullAsEmpty`            | `Write_NullStringAsEmpty`     | 存储 or 输出:字符串Null时输出为空(get时用)     |
| `BooleanNullAsFalse`           | `Write_NullBooleanAsFalse`     | 存储 or 输出:布尔Null时输出为空(get时用)      |
| `NumberNullAsZero`            | `Write_NullNumberAsZero`     | 存储 or 输出:数字Null时输出为空(get时用)     |
| `ArrayNullAsEmpty`             | `Write_NullListAsEmpty`     | Text     |
| `StringFieldInitEmpty`          | `Write_NullStringAsEmpty`     | 存储 or 输出:字符串字段初始化为空（返序列化时）     |
| `SerializeNulls`                     | `Write_Nulls`     | 输出：序列化Null     |
| `SerializeMapNullValues`     | `Write_Nulls`     | 输出：序列化Map/Null val     |
| `UseSetter`                       | `Write_AllowUseSetter`       | 使用设置属性     |
| `UseOnlySetter`                 | `Write_OnlyUseSetter`        | 只使用设置属性     |
| `UseGetter`                      | `Read_AllowUseGetter`        | 使用获取属性     |
| `UseOnlyGetter`                | `Read_OnlyUseGetter`        | 只使用获取属性     |
| `DisThreadLocal`               | /（没有线程缓存）     | 禁止线程缓存     |
| `StringJsonToNode`           | `Read_UnwrapJsonString`     | 存储 or 读取：当 value is json string 时，自动转为ONode      |
| `StringDoubleToDecimal`     | `Read_UseBigDecimalMode`     | 读取 Double 使用 BigDecimal     |
|  /                                     | `Read_UseBigIntegerMode`     | 读取 Long 使用 BigInteger     |
| `PrettyFormat`                    | `Write_PrettyFormat`    | 输出：漂亮格式化     |
| `DisableClassNameRead`     | / （默认是禁用）         | 禁用类名读取     |
| / （默认是启用）                 | `Read_AutoType`        | 读取数据中的类名（支持读取 @type 属性）     |
| `DisableCollectionDefaults`   | /（没有默认值）                        | 禁用集合默认值     |





### 3、Json 定制

* 全局 CodecLib（一般框架内部使用）

```
CodecLib.addCreator(.)
CodecLib.addDecoder(.)
CodecLib.addEncoder(.)
```

* 局部 Options

```
Options.of().addCreator(.).addDecoder(.).addEncoder(.).addFeature(.)
```


### 4、JsonPath 定制

* 函数

```
FunctionLib.register(.)
```


* 操作符

```
OperationLib.register(.)
```
