Мне нужно преобразовать полную строку в формат Json, проблема в том, что внутри полезной нагрузки есть вложенное поле, которое также должно читаться как Json.
Мой код Java выглядит так:
- Сначала я прочитал строку:
String payload
="{\"appId\":\"APP02\",\"employeeId\":\"789-33-3887\",\"name\":\"Paolo Ledner\",\"phonenumber\":\"757.910.0396\",\"beer\":\"Sierra Nevada Bigfoot Barleywine Style Ale\",\"company\":\"Schmidt LLC\",\"address\":\"{\\\"street\\\":\\\"Coralie Trafficway\\\",\\\"zipcode\\\":\\\"12291\\\"}\"}";
- Теперь я прочитал мой первый объект JSON:
Gson g = new Gson();
JsonElement jelem = g.fromJson(payload,JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();
Это правильно возвращает объект Json, но я не могу прочитать ключи из вложенного поля address
, тогда мне нужно прочитать содержимое этого поля, превратить его в строку и, в соответствии с моей логикой, затем применить тот же подход чтобы получить формат Json и прочитать нужные мне ключи, вот этот шаг:
String address = jobj.get("address").toString().substring(1,jobj.get("address").toString().length()-1);
JsonElement jeaddress = g.fromJson(address, JsonElement.class);
JsonObject jaddress = jeaddress.getAsJsonObject();
System.out.println(jaddress.get("zipcode"));
Вопросы
Строка address
возвращает правильно {\"street\":\"Coralie Trafficway\",\"zipcode\":\"12291\"}
, но затем, когда я пытаюсь напечатать jaddress.zipcode, я получаю ошибку:
Исключение в теме "main" com.google.gson.JsonSyntaxException:
com.google.gson.stream.MalformedJsonException: ожидаемое имя в строке 1
столбец 2 путь $. на com.google.gson.Gson.fromJson (Gson.java:902) на
com.google.gson.Gson.fromJson (Gson.java:852) в
com.google.gson.Gson.fromJson (Gson.java:801) в
com.google.gson.Gson.fromJson (Gson.java:773) в
bncingestion.kafkaconsumer.validating_payload (kafkaconsumer.java:29)
at bncingestion.kafkaconsumer.main (kafkaconsumer.java:15). Вызывается:
com.google.gson.stream.MalformedJsonException: ожидаемое имя в строке 1
столбец 2 путь $. в
com.google.gson.stream.JsonReader.syntaxError (JsonReader.java:1559)
на com.google.gson.stream.JsonReader.doPeek (JsonReader.java:513) на
com.google.gson.stream.JsonReader.hasNext (JsonReader.java:414) в
com.google.gson.internal.bind.TypeAdapters $ 29.read (TypeAdapters.java:738)
в
com.google.gson.internal.bind.TypeAdapters $ 29.read (TypeAdapters.java:714)
в
com.google.gson.internal.bind.TypeAdapters $ 35 $ 1.read (TypeAdapters.java:910)
на com.google.gson.Gson.fromJson (Gson.java:887) ... еще 5
Дополнительная версия этого преобразования без удаления "
находится здесь:
String address = jobj.get("address").toString();
JsonElement jeaddress = g.fromJson(address, JsonElement.class);
JsonObject jaddress = jeaddress.getAsJsonObject();
System.out.println(jaddress.get("zipcode"));
В этом случае ошибка:
Исключение в потоке "main" java.lang.IllegalStateException: не JSON
Объект: "{\" street \ ": \" Coralie Trafficway ", \" zipcode \ ": \" 12291 \ "}"
на com.google.gson.JsonElement.getAsJsonObject (JsonElement.java:90)
в
bncingestion.kafkaconsumer.validating_payload (kafkaconsumer.java:31)
at bncingestion.kafkaconsumer.main (kafkaconsumer.java:15)
Я ценю любую помощь.
спасибо