วัตถุแผนที่ Java ซึ่งมีฟิลด์สตริง JSON เป็นสตริง

ฉันประสบปัญหาขณะแมปวัตถุของฉันกับ JSON

ฉันมีออบเจ็กต์ซึ่งฉันต้องแปลงเป็น JSON ที่เหมาะสม แต่ฟิลด์ String ของออบเจ็กต์บางรายการอยู่ในรูปแบบ JSON แล้ว:

Sdr sdr = new Sdr();
sdr.setLocation_area(("location_area"));
sdr.setEvent_info(("{\"chargeableDur\":0}"));
sdr.setAgent_info("{\"scp\":\"NAVI\",\"stack\":\"CAP2\"}");
sdr.setService_info(("{\"bcap\":\"8090A3\",\"balID\":55969859}"));
sdr.setStarttime(("starttime"));

สำหรับการแมป JSON ฉันใช้ ObjectMapper:

public String toJsonString() {
    ObjectMapper mapper = new ObjectMapper();
    try {
        return mapper.writeValueAsString(this);
    } catch (JsonProcessingException e) {
        logger.error(e.getMessage());
    }
    return toString();
}

อย่างไรก็ตาม ObjectMapper ล้มเหลวในการแมปสตริงที่มี JSON อย่างถูกต้องแล้ว และหลังจากการแมป ฉันจะได้รับ JSON ประเภทนี้:

{  
   "event_info":""{\"chargeableDur\":0}",
   "location_area":"location_area",
   "agent_info":"{\"scp\":\"NAVI\",\"stack\":\"CAP2\"}",
   "service_info":""{\"bcap\":\"8090A3\",\"balID\":55969859}",
   "starttime":"starttime"
}

ฉันต้องการให้ ObjectMapper แมปวัตถุของฉันเช่นนั้น:

{  
   "event_info":{  
      "chargeableDur":0
   },
   "location_area":"location_area",
   "agent_info":{  
      "scp":"NAVI",
      "stack":"CAP2"
   },
   "service_info":{  
      "bcap":"8090A3",
      "balID":55969859
   },
   "starttime":"starttime"
}

person Marius Barkauskas    schedule 02.08.2017    source แหล่งที่มา
comment
ดังนั้นคุณต้องการ JSONify สตริงและปล่อยให้ JSON'ed เหมือนเดิมแล้วใช่ไหม มีวิธีใดบ้างที่จะรู้ได้ว่าอันไหนเป็น json'ed แล้ว?   -  person Turtle    schedule 02.08.2017
comment
mapper.writeValueAsString(this); ใช้เมธอด getX() ของแต่ละแอตทริบิวต์ของคลาสของคุณเพื่อใส่ไว้ใน JSon ? หากเป็นเช่นนั้น ให้กำหนดวิธีการเหล่านั้นใหม่เพื่อส่งคืนโดยไม่มีรูปแบบ JSon เมื่อมี   -  person Asew    schedule 02.08.2017
comment
จะเกิดอะไรขึ้นถ้าคุณเปลี่ยนสตริงเหล่านั้นให้เป็นการใช้งานอาร์เรย์ไบต์และให้การดีซีเรียลไลซ์เปลี่ยนกลับเป็นสตริง   -  person Austin_Anderson    schedule 02.08.2017
comment
มีเพียง 3 ฟิลด์ที่เป็น JSON'ed แล้ว: event_info, agent_info และ service_info แต่ฉันไม่รู้ว่าจะบอกผู้จัดการวัตถุได้อย่างไรว่าฟิลด์เหล่านี้เป็น JSON'ed แล้ว   -  person Marius Barkauskas    schedule 02.08.2017


คำตอบ (1)


ดูเหมือนว่าผลลัพธ์ json ของคุณจะถูกทำให้เป็นสตริง ลองใส่ผลลัพธ์สตริงแยก JSONObject เป็น

return new JSONObject(mapper.writeValueAsString(this)).toString();
person Chetan chadha    schedule 02.08.2017