Чтение строки Json с использованием ошибки результатов Gson «не массив JSON»

В моем проекте у меня сложный ответ 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. 

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

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

 JSONObject - {} JSONArray - [] 

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

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

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

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