将包含字符串json的java对象转换为json
在我们的应用程序中,一个数据库表的某些结果存储为json,如下所示:将包含字符串json的java对象转换为json,java,json,jackson,Java,Json,Jackson,在我们的应用程序中,一个数据库表的某些结果存储为json,如下所示: ---------------------------------------------------- ------------- content | other fields... ---------------------------------------------------- -------------- "{ \"key\"
---------------------------------------------------- -------------
content | other fields...
---------------------------------------------------- --------------
"{ \"key\":[\"value1\",\"value2\",\"value3\"]}" | 12 ...
我需要将一组记录的content
字段作为单个json获取并写入结果文件,如下所示:
(预期)
在对应的java实体中,我将@JsonIgnore
放在除内容
之外的所有字段中
class Result{
//@JsonIgnore
//otherfields
....
@Column("content")
private String content;//the json string field
....
}
但当我使用以下命令从db读取并写入文件时:
ObjectWriter writer = new ObjectMapper().writer().withDefaultPrettyPrinter();
writer.writeValue(new File(outFile), entityList);
我得到的文件是:
(原件)
你可能会注意到这个问题。它将jason字段作为字符串,并将其作为键“content”的值,而不是预期的嵌套jason,我认为,引号前的反斜杠会导致问题,整个JSON数据被视为字符串而不是JSON对象。在将JSON转换为对象之前,可以尝试删除反斜杠。我找到的解决方案之一是:。尝试使用@JsonRawValue注释 根据,您可以尝试使用
@JsonRawValue
注释内容:
class Result {
@JsonRawValue
private String content;
}
这将输出:
[ {
"content" : { "key":["value1","value2","value3"]}
} ]
这在语义上就是你想要的。但是,您希望outout的格式非常好。这可以通过指定序列化程序来实现,另请参见:
这不完全是你所期望的格式,但是越来越接近了。希望这有帮助。输出是正确的-您的期望可能不正确。如果您想要内容的JSON表示,那么您需要编写自定义序列化库,这里我的问题与表示无关。@JsonRawValue为我工作
class Result {
@JsonRawValue
private String content;
}
[ {
"content" : { "key":["value1","value2","value3"]}
} ]
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" ]
}
} ]