0


【Android -- 开源库】数据解析 fastjson 基本使用

在这里插入图片描述

一、介绍

fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。

优点

  • 速度快 fastjson 相对其他 JSON库的特点是快,从2011年 fastjson 发布 1.1.x 版本之后,其性能从未被其他Java实现的JSON库超越。
  • 使用广泛 fastjson 在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。
  • 测试完备 fastjson有非常多的testcase,在1.2.11版本中,testcase 超过3321个。每次发布都会进行回归测试,保证质量稳定。
  • 使用简单 fastjson的API十分简洁。
  • 功能完备 支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

二、使用

1. 添加依赖

implementation 'com.alibaba:fastjson:1.2.76'

2. json 字符串和 jsonObject 的转换

String user ="{\"id\":2,\"name\":\"lily\",\"age\":12}";//将json字符串转json对象,Feature.OrderedField防止乱序JSONObject jsonObject =JSON.parseObject(user,Feature.OrderedField);//toJSONString方法将json对象转json字符串String user1 = jsonObject.toJSONString();

3. json 字符串与 jsonArray 的转换

String user ="[{\"id\":2,\"name\":\"lily\",\"age\":12},{\"id\":3,\"name\":\"mary\",\"age\":23}]";//json字符串转jsonArrayJSONArray jsonArray =JSON.parseArray(user);for(Object o : jsonArray){JSONObject j =(JSONObject) o;Long id  = j.getLong("id");String name = j.getString("name");}///jsonArray转json字符串String userString = jsonArray.toJSONString();

4. jsonObject,jsonArray 嵌套

String user ="{\"id\":12,\"name\":\"wei\",\"teacher\":{\"name\":\"kasa\",\"age\":77},\"student\":[{\"id\":2,\"name\":\"lily\",\"age\":12},{\"id\":3,\"name\":\"mary\",\"age\":23}]}";JSONObject jsonObject =JSON.parseObject(user);Long id  = jsonObject.getLong("id");String name = jsonObject.getString("name");JSONObject jsonObjectTeacher = jsonObject.getJSONObject("teacher");String teacherName = jsonObjectTeacher.getString("name");JSONArray jsonArray = jsonObject.getJSONArray("student");for(Object o : jsonArray){JSONObject j =(JSONObject) o;Long studentId  = j.getLong("id");String studentName = j.getString("name");}

5. json 字符串与 jsonbean 转换

String userString ="{\"id\":2,\"name\":\"lily\",\"age\":12}";//json字符串转javabeanUser user =JSON.parseObject(userString,newTypeReference<User>(){});//javabean转json字符串String userJsonString =JSON.toJSONString(user);//javabean转jsonObjectJSONObject jsonObject =(JSONObject)JSON.toJSON(user);String userArrayString ="[{\"id\":2,\"name\":\"lily\",\"age\":12},{\"id\":3,\"name\":\"mary\",\"age\":23}]";//jsonArray转javabean集合ArrayList<User> userList =JSON.parseObject(userArrayString,newTypeReference<ArrayList<User>>(){});//对象转mapMap<String,Object> map =JSON.parseObject(JSON.toJSONString(user),newTypeReference<Map<String,Object>>(){});//map转对象org.apache.commons.beanutils.BeanUtils.populate(obj, map);

三、超大 json 文件解析

通过使用 JSON Stream Api 解析超大 json 文件。

StringFILE_PATH="C:\\Users\\Administrator\\Desktop\\user.json";JSONReader jsonReader =newJSONReader(newFileReader(newFile(FILE_PATH)));
jsonReader.startArray();while(jsonReader.hasNext()){/*3种方式取得json
   1.转成json对象
    JSONObject jsonObject = (JSONObject) jsonReader.readObject();
    String name = jsonObject.getString("name");
    System.out.println(name);
    2.通过JSONStreamContext对象迭代
    jsonReader.startObject();
    while(jsonReader.hasNext()) {
        String objKey = jsonReader.readString();
        String objVal = jsonReader.readObject().toString();
        System.out.println("key: " + objKey + ", value: " + objVal);
    }
    jsonReader.endObject();
    3.转成javabean
    User user = jsonReader.readObject(User.class);*/}
jsonReader.endArray();
jsonReader.close();

四、序列化扩展

1. PropertyPreFilter 根据 PropertyName 判断是否序列化

PropertyPreFilter filter =newPropertyPreFilter(){@Overridepublicbooleanapply(JSONSerializer jsonSerializer,Object o,String s){if("id".equals(s)){returntrue;}returnfalse;}};

2. PropertyFilter 根据 PropertyName 和 PropertyValue 来判断是否序列化

PropertyFilter filter =newPropertyFilter(){@Overridepublicbooleanapply(Object source,String name,Object value){// 属性是id并且大于等于100时进行序列化if("id".equals(name)){long id =((Long) value).longValue();return id >=100;}returnfalse;}};

3. NameFilter 修改 Key,如果需要修改 Key,process 返回值则可

NameFilter filter =newNameFilter(){@OverridepublicStringprocess(Object object,String name,Object value){// 属性是id是修改id的名字return name +"$";}};

4. ValueFilter 修改 Value

ValueFilter filter =newValueFilter(){@OverridepublicObjectprocess(Object object,String name,Object value){return value+"$";}};

5. BeforeFilter 序列化时在最前添加内容

BeforeFilter filter =newBeforeFilter(){@OverridepublicvoidwriteBefore(Object object){User user =(User) object;
        user.setName(user.getName()+"$$$");}};

6. AfterFilter 序列化时在最后添加内容

AfterFilter filter =newAfterFilter(){@OverridepublicvoidwriteAfter(Object object){User user =(User) object;
        user.setName(user.getName()+"$$$");}};

五、数据格式转换 SerializerFeature

WriteMapNullValue 是否输出值为 null 的字段,默认为 false

WriteNullListAsEmpty List 字段如果为 null, 输出为 [], 而非 null

WriteNullStringAsEmpty 字符类型字段如果为 null, 输出为”“, 而非 null

WriteNullNumberAsZero 数值字段如果为 null, 输出为 0, 而非 null

WriteNullBooleanAsFalse Boolean 字段如果为 null, 输出为 false, 而非 null

DisableCircularReferenceDetect 消除对同一对象循环引用的问题,默认为 false
SerializerFeature feature =SerializerFeature.DisableCircularReferenceDetect;String userString =JSON.toJSONString(maps,feature);

在 springboot 中使用:
自定义类继承 WebMvcConfigurerAdapter,重写 configureMessageConverters () 方法

@OverridepublicvoidconfigureMessageConverters(List<HttpMessageConverter<?>> converters){super.configureMessageConverters(converters);FastJsonHttpMessageConverter fastConverters =newFastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig =newFastJsonConfig();
    fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteNullNumberAsZero);
    fastConverters.setFastJsonConfig(fastJsonConfig);
    converters.add(fastConverters);}
标签: android json fastjson

本文转载自: https://blog.csdn.net/duoduo_11011/article/details/126746854
版权归原作者 Kevin-Dev 所有, 如有侵权,请联系我们删除。

“【Android -- 开源库】数据解析 fastjson 基本使用”的评论:

还没有评论