Jackson ObjectMapper从String序列化为JSON作为名称-值

时间:2019-02-21 09:59:18

标签: java json jackson

我有一些String,例如:

String value = "123";

当我通过ObjectMapper将此字符串序列化为json时:

objectMapper.writeValueAsString(value);

输出为:

"123"

是否可以使用字符串名称和字符串值来编写String?所需的输出:

"value" : "123"

PS:我不想用一个字段来序列化一个String值的DTO对象。

4 个答案:

答案 0 :(得分:1)

如果您有纯字符串,则序列化时会得到纯字符串。如果要将其包装在一个对象中,请使用地图作为最简单的解决方案。

Context

将其传递给映射器将产生以下内容:

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

如果将地图更改为String value = "123"; Map<String, String> obj = new HashMap<>(); obj.put("value", value); ,则可以传递几乎任何您想要的内容,即使地图中的地图也可以正确序列化。

如果您确实没有封闭的花括号,则可以始终使用子字符串,但是如果您仍要序列化为JSON,那将是一个非常奇怪的用例。

答案 1 :(得分:1)

您还可以使用Jackson JsonGenerator

try (JsonGenerator generator = new JsonFactory().createGenerator(writer)) {
     generator.writeStartObject();
     generator.writeFieldName("value");
     generator.writeString("123");
     generator.writeEndObject();
  }
}

答案 2 :(得分:0)

创建地图:

Map<String, String> map = new HashMap();
map.put("value", value);
String parsedValue = ObjectMapper.writeValueAsString(map);

您将获得:{"value":"123"}

答案 3 :(得分:0)

如果您使用的是Java 8,并且希望以自动化的方式进行操作而不创建映射或手动放置字符串变量名称“ value”,那么这就是您需要遵循的link-