杰克逊如何创建一个JsonObject

Fel*_*oid 2 java json jackson

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

{
Response: 200,
Lists: [
  {
    Test: "Math",
    Result: "6",
    Credit: "3"
  },
  {
   Test: "C++",
   Result: "10",
   Credit: "6"
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

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

JsonNodeFactory nodeFactory = new JsonNodeFactory();
Run Code Online (Sandbox Code Playgroud)

但我有这个问题

The constructor JsonNodeFactory() is not visible
Run Code Online (Sandbox Code Playgroud)

Chr*_*e L 10

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

您不需要实例化工厂.你可以使用public static one : 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);
Run Code Online (Sandbox Code Playgroud)

请注意,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)
}
Run Code Online (Sandbox Code Playgroud)