json处理(Gson)

  1. GsonBuilder Gson构造器,用于创建及配置Gson

    方法描述(大部分方法为链式调用)
    new GsonBuilder()构建方法
    setVersion(double versions)设置版本
    excludeFieldsWithModifiers(int… modifiers)排除某些修饰符修饰的字段
    modifiers为Modifier.PRIVATE等
    generateNonExecutableJson()生成不可以用的Json字符串
    excludeFieldsWithoutExposeAnnotation()排除没有@Expose修饰的字段
    serializeNulls()序列化空值
    enableComplexMapKeySerialization()启用复杂map集合key键序列化器
    通常和registerTypeAdapter方法一起用
    disableInnerClassSerialization()禁用内部类序列化
    setLongSerializationPolicy(LongSerializationPolicy policy)设置Long类型序列化策略
    setFieldNamingPolicy(FieldNamingPolicy namingConvention)设置字段名命名策略
    setFieldNamingStrategy(FieldNamingStrategy fieldNamingStrategy)设置自定义字段名命名策略
    setExclusionStrategies(ExclusionStrategy… strategies)设置排除策略
    addSerializationExclusionStrategy(ExclusionStrategy strategy)设置序列化排除策略
    addDeserializationExclusionStrategy(ExclusionStrategy strategy)设置反序列化排除策略
    setPrettyPrinting()设置json格式化输出
    setLenient()设置宽松json
    disableHtmlEscaping()取消HTML 转义的配置
    setDateFormat(String pattern)设置日期格式
    registerTypeAdapter(Type type, Object typeAdapter)注册类型适配器
    registerTypeAdapterFactory(TypeAdapterFactory factory)注册类型适配器工厂
    registerTypeHierarchyAdapter(Class<?> baseType, Object typeAdapter)注册类型层次结构适配器
    serializeSpecialFloatingPointValues()序列化特殊浮点值,例如
    Float.POSITIVE_INFINITY
    create()创建Gson对象
  2. Gson

    方法描述
    newBuilder()获取Gson构建器
    toJson(Object src)对象转json字符串,
    可指定Type类型
    可为已有字符串赋值
    可实现JsonElement转字符串
    toJsonTree(Object src)对象转jsons树元素对象,
    参数可添加Type类型
    fromJson(String json, Class classOfT)json字符串(流,json元素)转对象
    类型设置可为Class,Type
    serializeNulls()判断是否序列化null值
    excluder()获取排除对象
    fieldNamingStrategy()获取字段命名策略
    htmlSafe()判断html是否安全
    getAdapter(Class type)获取适配器,
    参数可为TypeToken
    getDelegateAdapter(TypeAdapterFactory skipPast, TypeToken type)获取代理适配器
    newJsonWriter(Writer writer)创建一个json字符流(写)
    newJsonReader(Reader reader)创建一个json字符流(读)
  3. 流对象(JsonWriter与JsonReader)

    • JsonWriter

      方法描述
      JsonWriter(Writer out)构造方法
      setIndent(String indent)设置缩进
      setLenient(boolean lenient)设置是否宽大
      setHtmlSafe(boolean htmlSafe)设置是否html安全
      setSerializeNulls(boolean serializeNulls)设置是否序列化null
      beginArray()开始一个数组,添加 [
      endArray()结束一个数组,添加 ]
      beginObject()开始一个对象,添加 {
      endObject()结束一个对象,添加 }
      name(String name)添加一个对象字段
      value(String value)添加一个字段值,可为各类数字类型
      注:一个name方法后必跟一个value方法
      jsonValue(String value)添加一个json字符串为字段值
      nullValue()添加一个null值
      flush()刷新流
      close()关闭流
    • JsonReader

      方法描述
      JsonReader(Reader in)构造方法
      setLenient(boolean lenient)设置缩进
      beginArray()开始数组解析
      endArray()结束数组解析
      beginObject()开始对象解析
      endObject()结束对象解析
      hasNext()是否有下一值
      peek()获取json令牌
      nextName()获取字段名
      nextString()获取string类型字段值
      nextBoolean()获取boolean类型字段值
      nextNull()获取null字段值
      nextDouble()获取double类型字段值
      nextLong()获取long类型字段值
      nextInt()获取int类型字段值
      close()关闭流
      skipValue()跳过当前值
      toString()转为字符串
      getPath()转为jsonPath
  4. 注解

    注解描述
    @Expose指定字段是否进行序列化及反序列化
    serialize:是否序列化,默认为true
    deserialize:是否反序列化,默认为true
    @SerializedName字段重命名
    value: 重命名
    alternate:反序列化时备用字段。多个取最后一个的值
    @Since版本控制,设置版本之后生效
    value:版本号
    @Until版本控制,设置版本之前生效
    value:版本号
    @JsonAdapter配置json适配器,类及字段上
    value: 适配器类
    nullSafe:为null是否安全,默认为true
  5. 常量

    • LongSerializationPolicy Long类型序列化策略

      常量描述
      DEFAULT默认
      STRING字符串
    • FieldNamingPolicy 字段名命名策略

      常量描述
      IDENTITY同实体类字段名一致
      UPPER_CAMEL_CASE大驼峰 “AbcDef”
      UPPER_CAMEL_CASE_WITH_SPACES带空格的大驼峰 “Abc Def”
      LOWER_CASE_WITH_UNDERSCORES带_的小写字母 “abc_def”
      LOWER_CASE_WITH_DASHES带-的小写字母 “abc-def”
      LOWER_CASE_WITH_DOTS带.的小写字母 “abc.def”
    • JsonToken

      常量描述
      BEGIN_ARRAY开始数组
      END_ARRAY结束数组
      BEGIN_OBJECT开始对象
      END_OBJECT结束对象
      NAME字段名
      STRING字符串类型的值
      NUMBER数字类型的值
      BOOLEAN布尔类型的值
      NULLnull的值
      END_DOCUMENT结束文档
  6. 示例

    • 自定义序列化及反序列化适配器

      public class MyTypeAdapter extends TypeAdapter<Person> {
          /**
           * 流式序列化(速度快),将序列化后的值写到流对象中
           * Person为泛型,适配器作用与类时,可为该类类型;用于字段时为该字段类型
           */
          @Override
          public void write(JsonWriter out, Person value) throws IOException {
              out.beginObject(); //流式序列化成对象开始,生成{
              out.name("id").value(value.getaDouble());//新增字段及值
              out.endObject(); //流式序列化结束,生成}
          }
          /**
           * 反序列化,从json流对象中读取
           */
          @Override
          public Person read(JsonReader in) throws IOException {
              Person person=new Person();
              in.beginObject(); //流式反序列化开始
      
              in.endObject(); //流式反序列化结束
              return person;
          }
      }
      
    • JsonReader解析json

      InputStreamReader in=new InputStreamReader(new FileInputStream("D:\\demo\\cvs1\\123456.json"));
              JsonReader jsonWriter=new JsonReader(in);
              jsonWriter.beginObject();
              while (jsonWriter.hasNext()) {
                  String name = jsonWriter.nextName();
                  System.out.println(name);
                  if(jsonWriter.peek().equals(JsonToken.BEGIN_ARRAY)){//
                      jsonWriter.beginArray();
                      while (jsonWriter.hasNext()) {//获取数组中每个值
                          System.out.println(jsonWriter.nextString());
                      }
                      jsonWriter.endArray();
                  }else{
                      System.out.println(jsonWriter.nextString());
                  }
              }
              jsonWriter.endObject();
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑重其事,鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值