我有一个包含一个成员displayPropsJson
的Pojo,它是一个客户端json字符串。在存储在服务器上之前,它使用JSON模式进行验证。
即
public class Item {
Long id; //23
String name; //"itemsName"
String displayPropsJson; // "{\"bold\" : true, \"htmlAllowed\" : true, \"icon\" :\"star.jpg\" }"
}
我想将序列化版本输出displayPropsJson作为displayProps子对象,例如:
{
"id" :23,
"name: : "itemsName",
"displayProps" : {
"bold" : true,
"htmlAllowed" : true,
"icon" : "star.jpg"
}
}
如何使用输出元素和json字符串作为json的Jackson序列化器来完成此操作? displayPropsJson会有所不同,但总是有效的json。
答案 0 :(得分:0)
是的我确信可以使用自定义Jackson序列化程序完成此操作。你可以做的另一件事是实现JsonSerializable, }
另一种可能性是实施JsonSerializable interface
最后一种可能性是切换库并使用Google's GSON,这样可以很容易地将对象序列化为json。
答案 1 :(得分:0)
除了创建自定义序列化程序之外,您还可以考虑两个选项。
@JsonRawString
注释标记字符串字段
应该按原样序列化而不引用字符。ObjectMapper
可用,并提供一个getter方法,该方法从json字符串值返回JsonNode
反序列化。这是一个展示两者的例子:
public class JacksonRawString {
public static class Item {
final private ObjectMapper mapper;
public Long id = 23l;
public String name = "itemsName";
@JsonRawValue
public String displayPropsJson = "{\"bold\" : true, \"htmlAllowed\" : true, " +
"\"icon\" :\"star.jpg\" }";
public JsonNode getDisplayPropsJson2() throws IOException {
return mapper.readTree(displayPropsJson);
}
public Item(ObjectMapper mapper) {
this.mapper = mapper;
}
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new Item(mapper)));
}
}
输出:
{
"id" : 23,
"name" : "itemsName",
"displayPropsJson" : {"bold" : true, "htmlAllowed" : true, "icon" :"star.jpg" },
"displayPropsJson2" : {
"bold" : true,
"htmlAllowed" : true,
"icon" : "star.jpg"
}
}
请注意,displayPropsJson2
获得了相同的输出,因为它被序列化为JsonNode