ลบช่องว่างออกจาก json โดยใช้แจ็คสัน

ฉันมี JSON ง่าย ๆ เช่นนี้:

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

บางครั้ง someValue ก็มีช่องว่างอยู่ด้วย (เช่น someValue )

ฉันไม่สามารถรับวิธี SET แต่ละค่ากลับไปที่โหนดได้ ฉันมีสิ่งนี้:

        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