目前我正在做类似的事情:
public class MyObject{
public String name;
//constructor here
}
所以,如果我序列化它:
ObjectMapper mapper = new ObjectMapper();
MyObject o = new MyObject("peter");
mapper.writeValue(System.out,o);
我得到了
{"name":"peter"}
我想使这个通用,所以课程将是:
public class MyObject{
public String name;
public String value;
//constructor here
}
这个电话:
ObjectMapper mapper = new ObjectMapper();
MyObject o = new MyObject("apple","peter");
mapper.writeValue(System.out,o);
会导致
{"apple":"peter"}
有可能吗?
答案 0 :(得分:3)
您似乎想要一种方法来存储通常命名的属性及其值,然后将它们呈现为JSON。 Properties
是一个很好的自然表示,ObjectMapper
知道如何序列化这个:
ObjectMapper mapper = new ObjectMapper();
Properties p = new Properties();
p.put("apple", "peter");
p.put("orange", "annoying");
p.put("quantity", 3);
mapper.writeValue(System.out, p);
输出:
{"apple":"peter","orange":"annoying","quantity":3}
虽然您可以从头开始构建ObjectNode
,但使用ObjectNode
来存储数据可能会导致Jackson与您的内部业务逻辑的不良耦合。如果您可以使用更合适的现有对象,例如Properties
或Map
的任何变体,则可以将JSON端与数据隔离。
添加到此:从概念上讲,您想问“我的对象是什么?”
ObjectNode
。Properties
。Map
。杰克逊可以处理所有这些问题。
答案 1 :(得分:1)
您可以直接使用杰克逊的API:
,而不是通过POJOprivate static final JsonNodeFactory FACTORY = JsonNodeFactory.instance;
//
final ObjectNode node = FACTORY.objectNode();
node.put("apple", "peter");
// etc
您也可以嵌套所需的节点。