Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将包含字符串json的java对象转换为json_Java_Json_Jackson - Fatal编程技术网

将包含字符串json的java对象转换为json

将包含字符串json的java对象转换为json,java,json,jackson,Java,Json,Jackson,在我们的应用程序中,一个数据库表的某些结果存储为json,如下所示: ---------------------------------------------------- ------------- content | other fields... ---------------------------------------------------- -------------- "{ \"key\"

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

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