电商商城定制开发【Android -- 开源库】fastjson 基本使用

一、介绍

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

优点

  • 速度快
    相对其他 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'
  • 1

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(); 
  • 1
  • 2
  • 3
  • 4
  • 5

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();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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");}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5. json 字符串与 jsonbean 转换

String userString = "{\"id\":2,\"name\":\"lily\",\"age\":12}";//json字符串转javabeanUser user = JSON.parseObject(userString, new TypeReference<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, new TypeReference<ArrayList<User>>(){});//对象转mapMap<String,Object> map = JSON.parseObject(JSON.toJSONString(user), new TypeReference<Map<String,Object>>(){});//map转对象org.apache.commons.beanutils.BeanUtils.populate(obj, map);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

三、超大 json 文件解析

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

String FILE_PATH = "C:\\Users\\Administrator\\Desktop\\user.json";JSONReader jsonReader = new JSONReader(new FileReader(new File(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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

四、序列化扩展

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

PropertyPreFilter filter = new PropertyPreFilter() {    @Override    public boolean apply(JSONSerializer jsonSerializer, Object o, String s) {        if ("id".equals(s)) {            return true;        }        return false;    }};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

PropertyFilter filter = new PropertyFilter() {    @Override    public boolean apply(Object source, String name, Object value) {        // 属性是id并且大于等于100时进行序列化        if ("id".equals(name)) {            long id = ((Long) value).longValue();            return id >= 100;        }        return false;    }};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

NameFilter filter = new NameFilter() {    @Override    public String process(Object object, String name, Object value) {        // 属性是id是修改id的名字        return name + "$";    }};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4. ValueFilter 修改 Value

ValueFilter filter = new ValueFilter() {    @Override    public Object process(Object object, String name, Object value) {        return value+ "$";    }};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

BeforeFilter filter = new BeforeFilter() {    @Override    public void writeBefore(Object object) {        User user = (User) object;        user.setName(user.getName() + "$$$");    }};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

AfterFilter filter = new AfterFilter() {    @Override    public void writeAfter(Object object) {        User user = (User) object;        user.setName(user.getName() + "$$$");    }};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

五、数据格式转换 SerializerFeature

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

WriteNullListAsEmpty List 字段如果为 null, 输出为 [], 而非 nullWriteNullStringAsEmpty 字符类型字段如果为 null, 输出为”“, 而非 nullWriteNullNumberAsZero 数值字段如果为 null, 输出为 0, 而非 nullWriteNullBooleanAsFalse Boolean 字段如果为 null, 输出为 false, 而非 nullDisableCircularReferenceDetect 消除对同一对象循环引用的问题,默认为 false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
SerializerFeature feature = SerializerFeature.DisableCircularReferenceDetect;String userString = JSON.toJSONString(maps,feature);
  • 1
  • 2

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

@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {    super.configureMessageConverters(converters);    FastJsonHttpMessageConverter fastConverters = new FastJsonHttpMessageConverter();    FastJsonConfig fastJsonConfig = new FastJsonConfig();    fastJsonConfig.setSerializerFeatures(            SerializerFeature.WriteNullNumberAsZero    );    fastConverters.setFastJsonConfig(fastJsonConfig);    converters.add(fastConverters);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发