Как распарсить JSON с одинаковыми полями в Java?

373
27 января 2017, 05:58

Есть следующий JSON:

[  
   {  
      "interests":"hobbies.1",
      "age":"age.1",
      "gender":"gender.1"
   }
]

Если я хочу его распарсить с помощью GSON я делаю следующее:

List<Map<String, String>> newList= gson.fromJson(JSON, new TypeToken<List<Map<String, String>>>()

Но что мне делать если имена полей совпадают? Map в таком случае не подходит

[  
   {  
      "interests":"hobbies.1",
      "interests":"hobbies.2",
      "gender":"gender.1"
   }
]
Answer 1

Стандарт не считает это ошибкой, но никаких гарантий не дает. Большинство библиотек либо превращают JSON-объект в пары ключ-значение и хранят в структурах, не предусматривающих повтор ключей, либо парсят в POJO-объекты, в которых по определению не может быть полей с одинаковыми именами.

When the names within an object are not unique, the behavior of software that receives such an object is unpredictable. Many implementations report the last name/value pair only. Other implementations report an error or fail to parse the object, and some implementations report all of the name/value pairs, including duplicates.

https://tools.ietf.org/html/rfc7159#page-6

В такой ситуации лучше всего договариваться с авторами этого JSON, чтобы они сделали поля уникальными. Попробуйте убедить их, что это ошибка.

READ ALSO
Оператор try c ресурсами

Оператор try c ресурсами

Зачем нужен усовершенствованный и появившийся в JDK 7 оператор try-c-ресурсами?

371
Не работает SELECT COUNT(*) в Mybatis

Не работает SELECT COUNT(*) в Mybatis

При выполнении запроса на получение количества записей возникает ошибка

390
Как добавить переменную для просмотра в режиме отладки в IntelliJ IDEA?

Как добавить переменную для просмотра в режиме отладки в IntelliJ IDEA?

Как добавить свою переменную для просмотра в режиме отладки в IntelliJ IDEA?

365
VideoView воспроизводит звук без изображения

VideoView воспроизводит звук без изображения

Дело в том, что VideoView с помощью MediaPlayer корректно воспроизводит все видео кроме 4k или Full HD разрешенияТо есть звук идет нормально, а вместо изображения...

357