【发布时间】:2017-05-27 06:24:14
【问题描述】:
我想为我的 restful web 服务导出一个 json 字符串。
我的班级看起来像:
public class Animal {
private String name;
private JsonElement additionalProperties; //generated with gson
private String additionalProperties2; //same as above but direct from db
}
additionalProperties 是 db 中的 Json 字段,以 String 形式返回给 Java。想法是,每一种动物都可以拥有自己的特殊属性和任何类型的数据结构,而无需在 Java 端对其进行建模。
当我尝试导出时,使用 gson。
List<Animal> animals = database.getAllAnimals(); //simplified
return gson.toJson(animals); // in real via javax.ws.rs.core.Response
我的问题是输出看起来像:
[
{"name": "Mia",
"additionalProperties: "{\"race\": \"dog\"}",
"additionalProperties2: "{\"race\": \"dog\"}"},
{...} ...
]
相反,我想要:
[
{"name": "Mia",
"additionalProperties: {"race": "dog"}"
{...} ...
]
我已经尝试在没有附加属性的情况下构建 JsonObjects 并使用“添加属性”来添加附加属性。但是输出是一样的。我想问题是Java字符串序列化。 DB 输出是正确的。 additionalProperties 是一个没有编码的普通字符串。
我看到了杰克逊的财产@JsonRawValue。这是如何运作的?我也可以用 gson 做这个吗?
【问题讨论】:
-
如何将 JSON 属性解析为 Map
(或 Map 如果 JSON 只应该包含字符串属性),并将其用作附加属性? -
两者都不是有效的 JSON。
-
additionalProperties 也可以是一个列表或包含子元素和子列表。
-
只是想知道:你为什么需要它?附: Gson 不允许产生非法的 JSON 文档。
-
它是一个特殊的微服务,其他服务可以在其中创建事件。一些事件有额外的数据并且想要存储它们。所以我在数据库中创建了一个 json 字段,并允许用户将 abritoty json 对象添加到事件中。
标签: java json serialization gson