Отображение JSON с вложенным объектом в GSON - PullRequest
0 голосов
/ 02 октября 2019

У меня есть класс схемы JSON, который автоматически генерируется с использованием AVRO. Я хотел бы создать объект GSON, используя этот JSON. Я пытаюсь сделать это, используя этот код

    @Test
    public void parseJson() {

        JSONParser jsonParser = new JSONParser();
        try {
            JSONObject jsonObject = (JSONObject) jsonParser.parse(new FileReader("/pathto/test.json"));
            ThinEvent thinEvent = new Gson().fromJson(jsonObject.toString(), ThinEvent.class);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

, но это приводит к следующей ошибке ... Похоже, GSON ищет строку, но JSON на самом деле содержит вложенный объект? Объект ThinEvent имеет refService, объявленный в виде списка.

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 74 path $.references[0].refService
private java.util.List<com.lm.gde.eventing.avro.Reference> references;

Вот мой JSON, я заменил некоторые значения на XXXX.

{
  "eventType": "policy.PolicyPremiumChangedEvent",
  "correlationId": "XXXX",
  "references": [
    {
      "ref": "XXX",
      "refType": "policy_id",
      "refService": {
        "com.lm.gde.eventing.avro.RefService": "policy_service"
      },
      "links": {
        "array": [
          {
            "refUri": ""
          }
        ]
      }
    },
    {
      "ref": "XXXXXX",
      "refType": "policy_number",
      "refService": {
        "com.lm.gde.eventing.avro.RefService": "policy_service"
      },
      "links": {
        "array": [
          {
            "refUri": "XXXXXX"
          }
        ]
      }
    },
    {
      "ref": "2019-09-28",
      "refType": "policy_tx_effective_date",
      "refService": {
        "com.lm.gde.eventing.avro.RefService": "policy_service"
      },
      "links": {
        "array": [
          {
            "refUri": "XXXXX"
          }
        ]
      }
    }
  ],
  "eventContext": null,
  "Timestamp": 1569574003295,
  "Version": "1"
}

1 Ответ

0 голосов
/ 02 октября 2019

GSON поддерживает вложенные объекты проверьте эту статью . Просто создайте модель, которая соответствует Json (но в Java / Kotlin) и передайте ее в GSON. То же самое с коллекциями . Вы даже можете использовать List вместо массивов.

Вы можете просто получить файл json в виде полной строки и также десериализовать его.

...