Чтение строки Json с использованием ошибки результатов Gson "не массив JSON" - PullRequest
4 голосов
/ 07 сентября 2011

В моем проекте у меня сложный ответ json. Я хочу прочитать это GSon.

JSON : {'FoodMenuRS':{'Results':[{'Items':{'Item':[{'@Id':'24'},{'@Id':'24'}]}}, {'Items':{'Item':{'@Id':'24'}}}]}}

Содержит JSONArray с первым «Item» и JSONObject со вторым. Следовательно, его вызов приводит к ошибке,

failed to deserialize json object {"@Id":"24"} given the type java.util.List<com.servlet.action.ItemInfo>  and  java.lang.IllegalStateException: This is not a JSON Array.

Пожалуйста, помогите, как я должен справиться с этим сценарием. Спасибо.

Ответы [ 3 ]

5 голосов
/ 07 сентября 2011

Строка, которую вы показываете, является JSONObject, а не JSONArray. Итак, в этом случае вам прежде всего нужно получить JSONObject и выполнить дальнейшее декодирование этого JSONObject.

JSONObject - {}

JSONArray - []

И действительно JSONObject или JSONArray должны быть закодированы с использованием Double-quotes(")

0 голосов
/ 07 сентября 2011

Ваш JSON действителен, но не для двойных кавычек ("), поскольку JSON поддерживает простые кавычки (') и никаких кавычек в имени ключа. См. http://sites.google.com/site/gson/gson-user-guide#TOC-Serializing-and-Deserializing-Colle

Однако в этом JSON есть имена ключей, которыеначинаются с @. Для строк JSON этот символ действителен в начале имени (см. правый столбец http://www.json.org/), но для Java эти имена недопустимы (см. раздел «Имена» http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html). В частности, имена начинаются с @являются аннотациями, и вы не можете использовать теги аннотаций для объявления переменных, полей, методов и т. д.

0 голосов
/ 07 сентября 2011

Это не допустимый объект JSON.Строки в JSON всегда заключаются в двойные кавычки (").Свяжитесь с производителем этого JSON и скажите ему, чтобы он использовал правильный кодер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...