有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Jackson ObjectMapper将java从字符串序列化为JSON作为namevalue

我有一些字符串,比如:

String value = "123";

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

objectMapper.writeValueAsString(value);

输出为:

"123"

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

"value" : "123"

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


共 (4) 个答案

  1. # 1 楼答案

    创建地图:

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

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

  2. # 2 楼答案

    如果你有一个普通的字符串,你会在序列化时得到一个普通的字符串。如果你想把它包装成一个物体,那么就用一张地图来获得最简单的解决方案

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

    将其传递给mapper将产生如下结果:

    { "value": "123" }
    

    如果你把地图改成<String, Object>,你可以传入几乎任何你想要的东西,甚至是地图中的地图,它们会正确地序列化

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

  3. # 3 楼答案

    如果您正在使用java 8,并且希望以自动化的方式进行操作,而无需创建映射或手动输入字符串变量名“value”,那么您需要遵循以下link

  4. # 4 楼答案

    您也可以使用Jackson JsonGenerator

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