包的导入
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")