Java中生成和解析JSON

包的导入

Springboot会自动包含

AndroidStudio中在build.gradle中的dependencies添加

    implementation 'com.fasterxml.jackson.core:jackson-core:2.10.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0'

对象的生成

MAPPER.writeValueAsString(object);

完整代码

    public static String toJson(Object pojo) {
        try {
            String data = MAPPER.writeValueAsString(pojo);
            return data;
        } catch (JsonProcessingException ex) {
            ex.printStackTrace();
        }
        return null;
    }

 对象的解析

接受参数为字符串

MAPPER.readValue(data,beanType)

其中beanType是比如Student.class

完整代码

    public static <T> T toPojo(String data, Class<T> beanType) {
        try {
            return MAPPER.readValue(data, beanType);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

解析List的对象

    public static <T> List<T> toList(String data, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            List<T> list = MAPPER.readValue(data, javaType);
            return list;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

解析复杂对象

 比如类

class POJO{

String hello;

String hi;

String good;

Integer yes;

Object pay;

}

如何解析pay呢?

1.简单方法

先获取pay的JSON字符串

new ObjectMapper().writeValueAsString(userCmd.getPayload());

然后根据 类型使用toPojo或者toList

其他注意事项

    • 如果json字符串中的属性个数小于java对象中的属性个数,可以顺利转换,java中多的那个属性为null
    • 如果json字符串中出现java对象中没有的属性,则在将json转换为java对象时会报错:Unrecognized field, not marked as ignorable
      解决方法:

      在目标对象的类级别上添加注解:@JsonIgnoreProperties(ignoreUnknown = true)

    • java对象名和json中名不一致时解决方法:

      在目标对象的字段级别上添加注解:@JsonProperty(value = "name")

原文地址:https://www.cnblogs.com/noigel/p/12448341.html