[英]Converting java object having string json filed in to JSON
在我们的应用程序中,一个数据库表的某些结果存储为json,如下所示:
---------------------------------------------------- -------------
content | other fields...
---------------------------------------------------- --------------
"{ \"key\":[\"value1\",\"value2\",\"value3\"]}" | 12 ...
我需要获取并写入结果文件,即一组记录的content
字段,作为单个json,例如:( 预期)
[
{
"content": {
"key": [
"value1",
"value2",
"value3"
]
}
}
.....
]
在orresponding Java的实体,我把@JsonIgnore
以外的所有字段content
。
class Result{
//@JsonIgnore
//otherfields
....
@Column("content")
private String content;//the json string field
....
}
但是当我从数据库读取并使用以下命令写入文件时:
ObjectWriter writer = new ObjectMapper().writer().withDefaultPrettyPrinter();
writer.writeValue(new File(outFile), entityList);
我得到的文件为:( 原始)
[
{
"content" : "{ \"key\":[\"value1\",\"value2\",\"value3\"]}"
}
....
]
您可能会注意到该问题。 它以jason字段为字符串,并作为键“ content”的值,而不是预期的嵌套jason
根据我如何使用Jackson将原始JSON包含在对象中? 您可以尝试使用@JsonRawValue
注释内容:
class Result {
@JsonRawValue
private String content;
}
这将输出:
[ {
"content" : { "key":["value1","value2","value3"]}
} ]
从语义上讲,这就是您想要的。 但是,您希望这次活动的格式很漂亮。 这可以通过指定一个序列化器来实现,另请参见使用Jackson将JSON字符串转换为Pretty Print JSON输出 :
class Result {
@JsonRawValue
@JsonSerialize(using = ToPrettyJsonSerializer.class)
private String content;
}
private static class ToPrettyJsonSerializer extends JsonSerializer<String> {
@Override
public void serialize(String string, JsonGenerator gen, SerializerProvider provider) throws IOException, JsonProcessingException {
Object json = new ObjectMapper().readValue(string, Object.class);
gen.writeObject(json);
}
}
输出:
[ {
"content" : {
"key" : [ "value1", "value2", "value3" ]
}
} ]
它与您期望的格式不完全相同,但是越来越接近。 希望能有所帮助。
我认为,引号前的反冲引起了问题,整个JSON数据被视为String而不是JSON对象。 您可以尝试在将JSON转换为对象之前删除反斜杠。 我找到的解决方案之一是: https : //stackoverflow.com/a/19871960/1150795 。
尝试使用@JsonRawValue批注。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.