Hapus spasi dari json menggunakan jackson

Saya memiliki JSON sederhana seperti ini:

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

Terkadang, someValue memiliki spasi di dalamnya. (mis. someValue )

Sepertinya saya tidak tahu cara MENGATUR setiap nilai kembali ke node. Aku punya ini:

        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?
        }   

Saya tahu bahwa JsonNodes sangat menarik, tetapi bagaimana cara mendapatkan JsonObjects? ‹String, JsonObject› tidak akan berfungsi.

Saya ingin dapat menguraikan ini sebagai objek (saya akhirnya ingin membuatnya secara rekursif untuk JSON yang lebih kompleks, tetapi satu per satu) sehingga ketika saya mencetak JSON akan terlihat seperti ini:

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

person mmaceachran    schedule 27.01.2021    source sumber
comment
apa yang sebenarnya kamu lakukan?   -  person deadshot    schedule 27.01.2021
comment
@deadshot Ingin menghapus spasi. Saya ingin suatu nilai menjadi suatu nilai   -  person mmaceachran    schedule 27.01.2021


Jawaban (2)


Diberikan contoh JSON

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

Anda dapat melakukannya seperti ini:
(Saya juga menambahkan beberapa kode untuk membaca masukan JSON dan mencetak keluaran JSON, dan memperbaiki beberapa kekurangan pada kode Anda agar dapat dikompilasi)

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);

Kemudian Anda mendapatkan keluaran JSON

{"enums":[{"someName":"someValue","a":"b"}]}
person Thomas Fritsch    schedule 27.01.2021

gunakan perpustakaan Gson (Hanya diperlukan beberapa baris):

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

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

jika mau, Anda juga dapat membalikkan seluruh proses (menambahkan spasi) dengan opsi pencetakan cantik Gson:

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

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

Semoga dapat membantu anda mengatasi permasalahan anda

Anda mendapatkan versi terbaru dari tautan di bawah ini: https://mvnrepository.com/artifact/com.google.code.gson/gson

person TanvirChowdhury    schedule 27.01.2021