杰克逊如何创建一个JsonObject

时间:2014-08-02 13:57:32

标签: java json jackson

我想创建一个像这样的JsonObject:

{
Response: 200,
Lists: [
  {
    Test: "Math",
    Result: "6",
    Credit: "3"
  },
  {
   Test: "C++",
   Result: "10",
   Credit: "6"
  }
 ]
}

我知道用lib org.json创建这个但是和Jackson一起创建吗?我尝试使用

JsonNodeFactory nodeFactory = new JsonNodeFactory();

但我有这个问题

The constructor JsonNodeFactory() is not visible

2 个答案:

答案 0 :(得分:10)

请务必使用最新版本的Jackson。他们从codehaus迁移到FasterXML:http://wiki.fasterxml.com/JacksonHome

您不需要实例化工厂。您可以使用公共静态名称:com.fasterxml.jackson.databind.node.JsonNodeFactory.instance

JsonNodeFactory factory = JsonNodeFactory.instance;
ObjectNode root = factory.objectNode();
root.put("Response", 200);
ArrayNode list = factory.arrayNode();
list.add(...);
...
root.set("List", list);

请注意,Jackson是一个很好的库,可以将Java POJO映射到JSON(以及后面)。您可以创建Jackson将序列化为JSON的Java类,而不是手动创建JSON结构:

public class Item {
    @JsonProperty("Test")
    private String test;

    @JsonProperty("Result")
    private String result;

    @JsonProperty("Credit")
    private String credit;
}

public class Root {
    @JsonProperty("Response")
    private int response;

    @JsonProperty("List")
    private List<Item> list;
}

public static void main(String[] args) {
    Root root = new Root();
    ...
    String json = new ObjectMapper().writeValueAsString(root)
}

答案 1 :(得分:1)

要创建JsonNode对象,请使用ObjectMapper。例如:

ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(JSON_STRING, JsonNode.class)

有关信息,请参阅the Jackson documentation