gpt4 book ai didi

java - 将具有字符串 json 字段的 java 对象转换为 JSON

转载 作者:行者123 更新时间:2023-11-30 08:03:40 25 4
gpt4 key购买 nike

在我们的应用程序中,有一个数据库表将一些结果存储为 json,如下所示:

---------------------------------------------------- -------------
content | other fields...
---------------------------------------------------- --------------
"{ \"key\":[\"value1\",\"value2\",\"value3\"]}" | 12 ...

我需要将一组记录的 content 字段作为单个 json 获取并写入结果文件,如下所示:(预期)

[
{
"content": {
"key": [
"value1",
"value2",
"value3"
]
}
}
.....
]

在相应的 java 实体中,我为除 content 之外的所有字段添加了 @JsonIgnore

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

最佳答案

根据How can I include raw JSON in an object using Jackson?您可以尝试使用 @JsonRawValue 注释内容:

class Result {
@JsonRawValue
private String content;
}

这将输出:

[ {
"content" : { "key":["value1","value2","value3"]}
} ]

这在语义上就是你想要的。然而,您希望输出的格式非常漂亮。这可以通过指定序列化器来实现,另请参见 Convert JSON String to Pretty Print JSON output using Jackson :

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

这并不完全是您期望的格式,但已经很接近了。希望有帮助。

关于java - 将具有字符串 json 字段的 java 对象转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com