【问题标题】:Serialize to JSON as name-value from String by Jackson ObjectMapperJackson ObjectMapper 将字符串中的名称值序列化为 JSON
【发布时间】:2019-02-21 09:59:18
【问题描述】:

我有一些字符串,比如:

String value = "123";

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

objectMapper.writeValueAsString(value);

输出是:

"123"

是否可以使用字符串名称和字符串值写入字符串?期望的输出:

"value" : "123"

PS:我不想用一个字段创建 DTO 对象来序列化一个字符串值。

【问题讨论】:

  • 如果你没有一个对象,但只有一个变量:我会手动组装简单的字符串 ("\"value\" : \"" + value + '"') 否则你有一个将被序列化的对象就好了。

标签: java json jackson


【解决方案1】:

你也可以使用 Jackson JsonGenerator

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

【讨论】:

    【解决方案2】:

    如果你有一个纯字符串,你会在序列化时得到一个纯字符串。如果你想将它包装在一个对象中,那么使用地图是最简单的解决方案。

    String value = "123";
    Map<String, String> obj = new HashMap<>();
    obj.put("value", value);
    

    通过映射器传递它会产生这样的结果:

    { "value": "123" }
    

    如果您将地图更改为&lt;String, Object&gt;,您几乎可以传入任何您想要的内容,甚至是地图中的地图,它们会正确序列化。

    如果你真的不能使用封闭的花括号,你总是可以使用子字符串,但如果你仍然序列化为 JSON,那将是一个非常奇怪的用例。

    【讨论】:

      【解决方案3】:

      创建地图:

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

      你会得到:{"value":"123"}

      【讨论】:

        【解决方案4】:

        如果您使用的是 java 8 并希望以自动化方式执行此操作,而无需创建映射或手动输入字符串变量名称“值”,这就是您需要遵循的 link-

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-31
          • 2010-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-20
          • 2013-11-09
          • 2011-12-29
          相关资源
          最近更新 更多