Объект карты Java, который содержит строковые поля JSON для строки

Я столкнулся с проблемой при сопоставлении моего объекта с JSON.

У меня есть объект, который мне нужно преобразовать в правильный JSON, но некоторые из строковых полей моего объекта уже имеют формат 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 как они есть? Есть ли способ узнать, какой из них уже 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: event_info, agent_info и service_info, но я не знаю, как сообщить диспетчеру объектов, что эти поля уже обработаны JSON.   -  person Marius Barkauskas    schedule 02.08.2017


Ответы (1)


Кажется, что ваш результат json является строковым. Попробуйте поместить результат строки в отдельный JSONObject как

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