2016-07-25 2 views
0

Что-то вроде этого. http://jsonlint.com/ говорит, что он действителен. Json внутри {} упрощен для этого примера.Deserialize вложенный массив JSON в Java с Gson

[[0,{"ok":true},[]],[1,{"ok":false},[]]] 

Или с абзацами:

[ 
    [0, { 
      "ok": true 
     }, 
     [] 
    ], 
    [1, { 
      "ok": false 
     }, 
     [] 
    ] 
] 

Это класс для объекта JSONClass.

public class JSONClass { 
    boolean ok; 
} 

Если бы я получил это право, это JSON строка массив массивов, последний, содержащий некоторые ID, фактические данные в формате JSON и пустой массив. Как я мог десериализировать это?

Это не работает. Я также попытался сделать класс с подклассами, не получилось.

JSONClass[] t = g.fromJson(json, JSONClass[].class); 
+1

Не будет ли JSON-список этих объектов просто '[{" ok ": true}, {" ok ": false}]'? – khelwood

+0

Хелвуд, это было бы намного проще, но сначала мне нужны эти идентификаторы, во-вторых, я не могу изменить формат ввода – Esixt

+1

Здесь много ложной и пустой структуры. Если вы не можете получить класс домена, который он должен представлять, я бы рекомендовал просто разобрать JSON напрямую и создать свой собственный класс домена. – azurefrog

ответ

0

Ну, у вас есть массив массивов здесь. Gson позволит вам преобразовать объекты JSON в класс, который вы хотите, но вам придется называть gson.fromJson() для каждого из них отдельно.

Учитывая строки JSON, содержащий ваш JSON, что-то, как это должно работать:

Gson gson = new Gson(); 
JsonParser jsonParser = new JsonParser(); 
JsonArray jsonArray = jsonParser.parse(json).getAsJsonArray(); 

for (JsonElement e: jsonArray) { 
    JSONClass o = gson.fromJson(e.getAsJsonArray().get(1), JSONClass.class); 
} 

По существу, JsonParser преобразует текст в JsonElement, который является базовым классом для Gson JSon массивов и объектов. Мы можем перебирать элементы JsonArray, в которые мы анализировали наш текст, который, в свою очередь, является другим массивом формата [id, object] - и для каждого элемента принимает часть объекта и десериализует это в POJO.

+0

Спасибо, его работа. – Esixt

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