Java 在将由Jackson映射器序列化的对象中包含JSON内容的最佳方法
我正在使用Jackson Mapper对象将对象封送到JSON中。它工作得很好,但有时我需要包含一些特定的JSON,这些JSON实际上不是要封送的对象的属性。如果我创建一个字符串属性,比如“extraJSON”,并将JSON内容放在那里,当该对象被封送时,extraJSON将被转义,因此最终成为JSON中的某种JSON。 我曾尝试创建JsonObject(Java8JSON)类型的属性,但未正确封送Java 在将由Jackson映射器序列化的对象中包含JSON内容的最佳方法,java,json,jackson,Java,Json,Jackson,我正在使用Jackson Mapper对象将对象封送到JSON中。它工作得很好,但有时我需要包含一些特定的JSON,这些JSON实际上不是要封送的对象的属性。如果我创建一个字符串属性,比如“extraJSON”,并将JSON内容放在那里,当该对象被封送时,extraJSON将被转义,因此最终成为JSON中的某种JSON。 我曾尝试创建JsonObject(Java8JSON)类型的属性,但未正确封送 有没有办法解决这个问题?到目前为止,我使用的是本地类(我动态创建并使用“Object”类型属性)
有没有办法解决这个问题?到目前为止,我使用的是本地类(我动态创建并使用“Object”类型属性),虽然有效,但这是一个很难解决的问题。下面是一个使用@JsonRawValue将类成员编组为JSON而不是作为包含转义JSON字符串的属性的非常基本的示例。不知道是否适用于您的场景,但希望能有所帮助
package com.spring.jackson.rawjson;
import static org.junit.Assert.assertEquals;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRawValue;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
public class RawJsonTest {
public static class PojoWithRawJsonMember {
private final String member1;
private final String member2;
private final String rawJsonMember1;
public PojoWithRawJsonMember(String member1, String member2, String rawJsonMember1) {
this.member1 = member1;
this.member2 = member2;
this.rawJsonMember1 = rawJsonMember1;
}
@JsonProperty("member1")
public String getMember1() {
return member1;
}
@JsonProperty("member2")
public String getMember2() {
return member2;
}
@JsonRawValue
public String getRawJsonMember1() {
return rawJsonMember1;
}
}
@Test
public void jsonRaw_shouldMarshalRawJson() throws Exception {
ObjectMapper mapper = new ObjectMapper();
PojoWithRawJsonMember thingToMarshal = new PojoWithRawJsonMember("value1", "value2", "{\"key\":\"value\"}");
String marshalled = mapper.writeValueAsString(thingToMarshal);
assertEquals("{\"rawJsonMember1\":{\"key\":\"value\"},\"member1\":\"value1\",\"member2\":\"value2\"}",
marshalled);
}
}
@JsonRawValue在序列化时工作。据我从JavaDocs中了解,它不适用于反序列化。您尝试过@JsonRawValue吗?