zoukankan      html  css  js  c++  java
  • 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")

  • 相关阅读:
    .IllegalArgumentException: Mapped Statements collection does not contain 异常一例【我】
    Spring配置文件里加载路径中的通配符
    线程池使用Callable示例【我】
    使用Callable和Future接口创建线程
    Java线程池(Callable+Future模式)
    集合切割
    draw call 理解和优化
    Unity 3d导入3dMax模型 产生若干问题
    3dmax做的模型导入U3d后 当模型靠近摄像机时镂空问题
    不管多少个空格替换为一个空格
  • 原文地址:https://www.cnblogs.com/noigel/p/12448341.html
Copyright © 2011-2022 走看看