如何将json字段Map为对象类型和数组类型?

nhaq1z21  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(378)

以下是json中的响应:

{

  "info" : {
      "risk" : <object>,
      "operations" : <array>,
      "status" : <string>
  }
}

如何在一个类中Map这个?下面是我尝试的类Map:

public class Info {

    private Object risk;
    private Array operations;
    private String status;

}
e1xvtsh3

e1xvtsh31#

尝试使用jackson数据绑定https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind 采用以下方法:

public static Object convertJsonStringToObject(String jsonString, Class classToConvert) {
        try {
            return new ObjectMapper().readValue(jsonString, classToConvert);
        } catch (JsonProcessingException e) {
            LOG.error("Error when convert object from json.", e.getMessage(), e.getCause());
            throw new RuntimeException(e);
        }
    }
Info info = (Info) JsonConverter.convertJsonStringToObject(stringJson, Info.class);
3zwtqj6y

3zwtqj6y2#

您的类定义如下:

public class A {
   private Info info;
}

public class Info {
    private YourClass risk;
    private List<YourAnotherClass> operations;
    private String status;
}

您可以使用jackson反序列化json字符串。注意你的目标类类型应该是 A.class .
如果您不知道json字符串的内容,可以使用 JsonNode 迭代它。例如:

public static void iterate(JsonNode node) {
        if (node.isValueNode()) {
            System.out.println(node.toString());
            return;
        }

        if (node.isObject()) {
            Iterator<Entry<String, JsonNode>> it = node.fields();
            while (it.hasNext()) {
                Entry<String, JsonNode> entry = it.next();
                iterate(entry.getValue());
            }
        }

        if (node.isArray()) {
            Iterator<JsonNode> it = node.iterator();
            while (it.hasNext()) {
                iterate(it.next());
            }
        }
    }

public static void main(String[] args) {
        try {
            String jsonStr = ""; // your input string
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode node = objectMapper.readTree(jsonStr);
            iterate(node);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

相关问题