2010-11-11 1 views
2

Я новичок в GSON. Это мой примерКак декодировать JSON с помощью GSON с этим примером?

[["a","b","c"],[1,2,3],[4,5,6]] 

Я хочу разбить на массив. Я пробую этот код

String test = "[ [\"a\",\"b\",\"c\"],[1,2,3]]"; 
String[] column = gson.fromJson(test, String[].class); 

Это не работает ... и получите ошибку.

The JsonDeserializer StringTypeAdapter failed to deserialized json object ["a","b","c"] given the type class java.lang.String 
com.google.gson.JsonParseException: The JsonDeserializer StringTypeAdapter failed to deserialized json object ["a","b","c"] given the type class java.lang.String 

Я знаю этот пример, это сочетание массива String и массивов Integer.

Как я справляюсь с этим?

Спасибо ..

+0

Какая ошибка? Мой хрустальный шар все еще находится в химчистках (не спрашивайте ...). –

+0

Благодарим за совет. Я отредактирую и разместите сообщение об ошибке. –

+1

Вы пробовали 'String [] [] column = gson.fromJson (test, String [] []. Class);'? –

ответ

2

Проблема заключается в том, что вы пытаетесь преобразовать JSON в массив строк, когда на самом деле это не массив строк вообще.

Поскольку элементы массива не имеют имен свойств, вы также не можете создать нормальный класс Java для его хранения. Таким образом, его нужно будет десериализовать как , а не в виде 2D-массива. Учитывая, что некоторые элементы являются строками, а некоторые являются целыми, наиболее конкретным общим суперклассом является Object.

Таким образом, единственным классом массива, который может работать, является Object[][].class. Я не знаю, если GSON поддерживает гетерогенные 2D массивы, но попробуйте это и выяснить:

String[] column = gson.fromJson(test, Object[][].class); 

Если это не удается разрешить объект, попробуйте передать в List.class вместо. Это будет , вероятно, сбой, поскольку он дает GSON информацию о типе, с помощью которой можно разрешить вложенные объекты, но стоит попробовать.

Смежные вопросы