【问题标题】:Remove whitespace from json using jackson使用jackson从json中删除空格
【发布时间】:2021-04-30 20:27:51
【问题描述】:

我有一个像这样的简单 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.. }]
}

【问题讨论】:

  • 你到底在做什么?
  • @deadshot 希望去除空格。我希望“somevalue”成为“somevalue”

标签: java json jackson


【解决方案1】:

给出一个 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"}]}

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2017-01-29
    • 2013-10-23
    相关资源
    最近更新 更多