我有一个可以使用Jackson序列化为JSON的对象。我想将此对象添加到JSONObject并将内容序列化
JSONObject msg = new JSONObject();
put("something", "value");
put("myThing", myThing);
mapper.writeValueAsString(msg);
String s = msg.toString();
但结果是
{"something":"value","myThing":"com.example.things"}
我试过了
put("myThing", mapper.valueToTree(myThing))
// and
put("myThing", mapper.writeValueAsString(myThing))
但是这两个都会导致子对象被转义
{"something":"value","myThing":"{\"foo\":\"bar\"}"}
我如何得到我真正想要的东西......
{"something":"value","myThing":{"foo":"bar"}}
答案 0 :(得分:2)
为myThing对象创建一个JSONObject。
像这样:
JSONObject obj = new JSONObject();
obj.put("foo", myThing.getFoo());
并将其添加到主JSONObject:
JSONObject msg = new JSONObject();
msg.put("something", "value");
msg.put("myThing", obj);
另一种方法是使用Annotations标记应该序列化的类中的字段,然后通过反射生成JSON对象。
I have some classes on Github which you can use
使用示例:
public class MyClass {
@JSONElement(name = "foo")
private String field1;
MyClass(String f) {
this.field1 = f;
}
[...]
}
MyClass object = new MyClass("bar");
JSONObject json = JSONMarshaller.marshall(object);
此对象的结果JSON为:
{"foo":"bar"}
答案 1 :(得分:0)
我设法混淆了org.json
和com.fasterxml.jackson
。
ObjectNode msg = mapper.createObjectNode();
msg.put("something", "value");
msg.put("myThing", mapper.valueToTree(myThing));
String s = msg.toString();
这现在给出了我期待的输出