当前位置:   article > 正文

json处理(FastJson)_com.alibaba.fastjson2.jsonexception: not allow unq

com.alibaba.fastjson2.jsonexception: not allow unquoted fieldname

1. maven

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.68</version>
  5. </dependency>

2. API

对象静态方法(常用)描述
JSONparse(String text)

功能:json字符串转Object对象

参数:

      要转换文本为 string 或 byte[]

      可在参数中配置下列对象

            ParserConfig     解析器配置对象(详见3.6)

            Feature             设置特征(详见3.2)

parseObject(String text)

功能:json字符串转对象

参数:

      带class或Type或TypeReference可返回javaBean对象,

      其他返回为 JSONObject 对象

      要转换文本为 string 或 byte[] 或 InputStream

      可在参数中配置下列对象

            Feature             设置特征(详见3.2)

            ParserConfig     解析器配置对象(详见3.6)

            ParseProcess    解析过程对象 (详见3.7)

parseArray(String text)

功能:json字符串转JSONArray对象

      带class或Type[]可返回j对象集合,

toJSON(Object javaObject)

功能:java对象转换json对象

    可在参数中配置下列对象

            SerializeConfig             配置信息(详见3.5)

toJSONString(Object object)

功能:对象转换json字符串

    prettyFormat 参数为 true,可配置json字符串格式化

    可在参数中配置下列对象

            SerializerFeature             设置特征(详见3.3)

            SerializeConfig                配置信息(详见3.5)

            SerializeFilter                  配置过滤器(详见3.4)

toJSONBytes(Object object)

功能:对象转换Bytes数组

    可在参数中配置下列对象

            SerializerFeature             设置特征(详见3.3)

            SerializeConfig                配置信息(详见3.5)

            SerializeFilter                  配置过滤器(详见3.4)

toJavaObject(JSON json, Class<T> clazz)功能:java对象转换java对象
writeJSONString(OutputStream o, Object obj)

功能:对象转Json到输出流中

    参数流对象可为 Writer 或 OutputStream

    可在参数中配置下列对象

            SerializerFeature             设置特征(详见3.3)

            SerializeConfig                配置信息(详见3.5)

            SerializeFilter                  配置过滤器(详见3.4)

JSONArrayJSON子类,侧重处理JSONArray对象
JSONObjectJSON子类,侧重处理JSONObject对象
JSONPatheval(Object rootObject, String path)求值,获取rootObject对象path节点的值
size(Object rootObject, String path)求长度,获取rootObject对象path节点的数组或集合元素数量
contains(Object rootObject, String path)是否包含,获取rootObject对象path节点是否存在
containsValue(Object o, String path, Object value)是否包含,获取rootObject对象path节点的值是否为v
set(Object rootObject, String path, Object value)修改rootObject对象path节点的值
arrayAdd(Object o, String path, Object... values)往rootObject对象path节点的数组或集合添加元素
remove(Object root, String path)移除rootObject对象path节点值
compile(String path)获取rootObject对象path节点的 JSONPath 对象
read(String json, String path)获取json字符串path节点的 JSONObject或JSONArray 对象
extract(String json, String path)获取json字符串path节点的 JSONObject或JSONArray 对象
paths(Object javaObject)获取rootObject对象各path路径,返回map
reserveToArray(Object object, String... paths)获取rootObject对象各path节点数据为JSONArray
reserveToObject(Object object, String... paths)获取rootObject对象各path节点数据为JSONObject
keySet(Object rootObject, String path)获取rootObject对象path节点下的各节点

3. 其他配置

3.1 常用注解

@JSONField        字段上
    name        转换为json的key值
    serialize    是否序列化 默认true可序列化
    deserialize    是否反序列化 默认true可反序列化
    ordinal     排序
    format        日期格式
    serializeUsing  性定制序列化
@JSONType            类上
    ignores          配置不序列化的列,数组
    includes        配置序列化的列,数组
    orders            排序,配置的在前面,数组
    serialzeFeatures配置多个SerializerFeature
    alternateNames    配置反序列化多个字段,数组
    jsonDirect        把字段为 json数据格式 进行转换

3.2 Features 说明

    AutoCloseSource,                    自动关流,默认自动关闭
    AllowComment,                        是否允许解析使用注释(包括'/'+'*' 和'//' 变量),默认不允许
    AllowUnQuotedFieldNames,   是否将允许使用非双引号属性名字,默认不允许
    AllowSingleQuotes,                 是否允许单引号来包住属性名称和字符串值,默认不允许
    InternFieldNames,                   是否可以被String#intern 规范化表示
    AllowISO8601DateFormat,      字符串符合ISO8601格式的日期时,会直接转换成日期类
    AllowArbitraryCommas,            允许多重逗号,如果设为true,则遇到多个逗号会直接跳过;
    UseBigDecimal,                        这个设置为true则用BigDecimal类来装载数字,否则用的是double;
    IgnoreNotMatch,                       忽略不匹配
    SortFeidFastMatch,                   按照fieldName排序读取
    DisableASM,                               禁用ASM
    DisableCircularReferenceDetect,  禁用循环引用检测
    InitStringFieldAsEmpty,                  对于没有值得字符串属性设置为空串
    SupportArrayToBean,                     支持数组to对象
    OrderedField,                                  属性保持原来的顺序
    DisableSpecialKeyDetect,              禁用特殊字符检查
    UseObjectArray,                            使用对象数组
    SupportNonPublicField,
    IgnoreAutoType,
    DisableFieldSmartMatch,
    SupportAutoType,
    NonStringKeyAsString,
    CustomMapDeserializer;

3.3 SerializerFeature 说明

    PrettyFormat                    格式化输出
    UseSingleQuotes                    使用单引号
    WriteMapNullValue                输出null值
    UseISO8601DateFormat            Date使用ISO8601格式输出
    WriteNullListAsEmpty            List字段如果为null,输出为[]
    WriteNullStringAsEmpty            字符类型字段如果为null,输出为”“
    WriteNullNumberAsZero            数值字段如果为null,输出为0
    WriteNullBooleanAsFalse            Boolean字段如果为null,输出为false
    BrowserCompatible                对中文进行转译
    WriteDateUseDateFormat            全局修改日期格式
    BeanToArray                        将对象转为array输出
    DisableCircularReferenceDetect    消除对同一对象循环引用的问题
    QuoteFieldNames,                输出key时是否使用双引号,默认为true
    SkipTransientField
    SortField
    WriteClassName                    序列化时写入类型信息,默认为false。反序列化是需用到
    WriteSlashAsSpecial                对斜杠'/'进行转义
    NotWriteRootClassName
    DisableCheckSpecialChar
    IgnoreNonFieldGetter
    WriteEnumUsingName
    WriteNonStringKeyAsString
    BrowserSecure
    WriteTabAsSpecial
    NotWriteDefaultValue
    WriteEnumUsingToString

 3.4 SerializeFilter说明

  1. PropertyPreFilter 根据PropertyName判断是否序列化
  2. PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
  3. NameFilter 修改Key,如果需要修改Key,process返回值则可
  4. ValueFilter 修改Value
  5. BeforeFilter 序列化时在最前添加内容
  6. AfterFilter 序列化时在最后添加内容
  1. PropertyFilter filter = new PropertyFilter() {
  2. public boolean apply(Object source, String name, Object value) {
  3. //返回true进行序列化 source(原数据) name(key) value(value)
  4. return false;
  5. }
  6. };
  7. PropertyPreFilter filter = new PropertyPreFilter () {
  8. @Override
  9. public boolean apply(JSONSerializer jsonSerializer, Object o, String s) {
  10. //返回true进行序列化 0(原数据) s(key)
  11. return false;
  12. }
  13. };
  14. NameFilter filter = new NameFilter () {
  15. @Override
  16. public String process(Object o, String s, Object o1) {
  17. //返回key值 o(原数据) s(key) o1(value)
  18. return s;
  19. }
  20. };
  21. ValueFilter filter = new ValueFilter () {
  22. @Override
  23. public Object process(Object o, String s, Object o1) {
  24. //返回value o(原数据) s(key) o1(value)
  25. return o1;
  26. }
  27. };
  28. BeforeFilter filter = new BeforeFilter () {
  29. @Override
  30. public void writeBefore(Object o) {
  31. writeKeyValue("key","value");//在json前添加数据
  32. }
  33. };
  34. AfterFilter filter = new AfterFilter() {
  35. @Override
  36. public void writeAfter(Object o) {
  37. writeKeyValue("key","value");//在json后添加数据
  38. }
  39. };

3.5 SerializeConfig 说明

  1. SerializeConfig config = SerializeConfig.getGlobalInstance();
  2. SerializeConfig config = new SerializeConfig();
  3. config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;

3.6 ParserConfig 说明

暂无

3.7  ParseProcess 说明

  1. ExtraProcessor processor = new ExtraProcessor() {
  2. public void processExtra(Object object, String key, Object value) {
  3. }
  4. };
  1. ExtraTypeProvider provider=new ExtraTypeProvider() {
  2. @Override
  3. public Type getExtraType(Object o, String s) {
  4. System.out.println(1111);
  5. return null;
  6. }
  7. };

3.8  配置项

配置项配置内容示例
PropertyNamingStrategy.SnakeCase字段命名策略aaBb
PropertyNamingStrategy.PascalCaseAaBb
PropertyNamingStrategy.SnakeCaseaa_bb
PropertyNamingStrategy.KebabCaseaa-bb

 

3.9 自定义序列化与反序列化接口说明

自定义接口,在注解中配置使用

  1. package com.example.mydemo.fastjson;
  2. import com.alibaba.fastjson.serializer.JSONSerializer;
  3. import com.alibaba.fastjson.serializer.ObjectSerializer;
  4. import java.io.IOException;
  5. import java.lang.reflect.Type;
  6. //序列化
  7. public class MySerializer implements ObjectSerializer {
  8. @Override
  9. public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
  10. int features) throws IOException {
  11. //object字段值 fieldName字段名 fieldType字段类型
  12. serializer.write(object);
  13. }
  14. }
  1. package com.example.mydemo.fastjson;
  2. import com.alibaba.fastjson.parser.DefaultJSONParser;
  3. import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
  4. import java.lang.reflect.Type;
  5. //反序列化
  6. public class MyDeserializer implements ObjectDeserializer {
  7. @Override
  8. public <T> T deserialze(DefaultJSONParser defaultJSONParser, Type type, Object o) {
  9. return null;
  10. }
  11. @Override
  12. public int getFastMatchToken() {
  13. return 0;
  14. }
  15. }

4. 实例代码

  1. //JSON方法
  2. //json字符串转对象,参数还可配置ParserConfig,,Feature等,转换文本可为byte[]
  3. Object parse(String text)
  4. //json字符串转 JSONObject 对象,参数可配置Feature
  5. JSONObject parseObject(String text)
  6. //json字符串转 实体 对象;text 可为byte[],clazz可配为Type,还可配置Feature,ParserConfig等
  7. T parseObject(String text, Class<T> clazz)
  8. //输入流转换对象,还可配置Charset
  9. T parseObject(InputStream is, Type type, Feature... features)
  10. //json字符串转 JSONArray 对象
  11. JSONArray parseArray(String text)
  12. //json字符串转 list 对象,clazz可配置为Type[]
  13. List<T> parseArray(String text, Class<T> clazz)
  14. //list,实体类转换为JSONArray ,JSONObject ,可配置ParserConfig
  15. Object toJSON(Object javaObject)
  16. //JSONObject 转 实体类
  17. T toJavaObject(JSON json, Class<T> clazz)
  18. //对象转byte[] ,还可配置SerializeFilter,SerializeConfig等
  19. byte[] toJSONBytes(Object object, SerializerFeature... features)
  20. //对象转json字符串,可配置SerializeConfig,SerializerFeature,SerializeFilter等,还有其他配置(如是否格式化)
  21. String toJSONString(Object object)
  22. //json写出到文本,os可为Writer;还可配置Charset,defaultFeatures
  23. int writeJSONString(OutputStream os, Object object, SerializerFeature... features)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/982429
推荐阅读
相关标签
  

闽ICP备14008679号