使用杰克逊从 json 中删除空格

Remove whitespace from json using jackson

我有一个简单的 JSON 像这样:

{
  "enums" : [{"someName" : "  someValue   ", etc.. }]
}

有时,someValue 中有空格。 (即“ someValue ”)

我似乎不知道如何将每个值设置回节点。我有这个:

        JsonNode values = root.get("enumValues");
        Iterator<Entry<String, JsonNode>> nodes = values.getFields();
        while (nodes.hasNext()) {
             Map.Entry<String, JsonNode> entry = (Map.Entry<String, JsonNode>) nodes.next();
             //  what do I do here?
        }   

我知道 JsonNodes 是不可变的,但我如何获得 JsonObjects? 无效。

我希望能够将其解析为一个对象(我最终想递归地进行更复杂的 JSON,但一次做一件事)这样当我 打印 JSON 看起来像这样:

{
  "enums" : [{"someName" : "someValue", etc.. }]
}

给定一个 JSON 例子

{
    "enums" : [{"someName" : "  someValue   ", "a": " b "}]
}

你可以这样做:
(我还添加了一些代码来读取 JSON 输入并打印 JSON 输出, 并修复了代码中的一些缺陷以使其可编译)

ObjectMapper objectMapper = new ObjectMapper();
File file = new File("example.json");
JsonNode root = objectMapper.readValue(file, JsonNode.class);
    
ArrayNode arrayNode = (ArrayNode) root.get("enums");
ObjectNode objectNode = (ObjectNode) arrayNode.get(0);      
Iterator<Map.Entry<String, JsonNode>> nodes = objectNode.fields();
while (nodes.hasNext()) {
    Map.Entry<String, JsonNode> entry = nodes.next();
    if (entry.getValue().isTextual()) {
        String s = entry.getValue().asText();  // get string from JSON node
        s = s.trim();                          // remove leading/trailing space
        objectNode.put(entry.getKey(), s);     // put the string back into JSON node
    }
} 

objectMapper.writeValue(System.out, root);

然后你得到 JSON 输出

{"enums":[{"someName":"someValue","a":"b"}]}