繁体   English   中英

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

[英]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批注。

如何使用Jackson将原始JSON包含在对象中?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM