Удалить пробелы из json с помощью jackson

У меня есть простой JSON:

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

Иногда в 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? ‹String, JsonObject› не будет работать.

Я хочу иметь возможность анализировать это как объект (в конечном итоге я хочу сделать рекурсивным для более сложного JSON, но по одному), чтобы при печати JSON это выглядело так:

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

person mmaceachran    schedule 27.01.2021    source источник
comment
что именно ты делаешь?   -  person deadshot    schedule 27.01.2021
comment
@deadshot Хочу убрать пробелы. Я хочу, чтобы какое-то значение было каким-то значением   -  person mmaceachran    schedule 27.01.2021


Ответы (2)


Учитывая пример 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"}]}
person Thomas Fritsch    schedule 27.01.2021

используйте библиотеку Gson (необходимо всего несколько строк):

public static String simplify(String json) {
    Gson gson = new GsonBuilder().create();

    JsonElement el = JsonParser.parseString(json);
    return gson.toJson(el);
}

если хотите, вы также можете отменить весь процесс (добавляя пробелы) с помощью красивой опции печати Gson:

public static String beautify(String json) {
    Gson gson = new GsonBuilder().setPrettyPrinting().create();

    JsonElement el = JsonParser.parseString(json);
    return gson.toJson(el);
}

Надеюсь, это поможет вам преодолеть вашу проблему

Вы можете получить последнюю версию по ссылке ниже: https://mvnrepository.com/artifact/com.google.code.gson/gson

person TanvirChowdhury    schedule 27.01.2021