java - 如何将对象添加到 JSONObject 而不转义内容

标签 java json jackson

我有一个可以使用 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"}}

最佳答案

为 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"}

关于java - 如何将对象添加到 JSONObject 而不转义内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31917348/

相关文章:

java - java.nio.* 中的 getLastModifiedTime() 方法示例。

java - Android jobScheduler 不会因 jobFinished(params, false) 而停止

java - 如果有多个子标签,前面的 sibling 将不起作用

python - 将 SqlAlchemy orm 结果转换为 dict

java - 如何在 Json 树中按名称查找节点?

java - 监听SQS队列时org.springframework.core.task.TaskRejectedException?

java - Jackson JSON 通过树遍历映射到对象

javascript - GIPHY API - 如何搜索 Gif?

jackson - Kotlin:数据类上的 JsonProperty.Access.READ_ONLY

java - 使用 Jackson 反序列化自引用对象