2016-08-01 2 views
2

У нас есть ответ JSON с сервера, где у нас есть массив байтовых массивов, но также может быть строковое значение «Нет» вместо пустого массива. Пример:Поиск способа анализа многопоточного поля JSON

{'jsonrpc': '2.0', 'id': 31, 'result': {"bytes_arrays": [[21,99,165,243,25,210,14,121,120,39,22,102,59],[22,32,42,54,65,65,76,87],None]} 

В моем классе я обычно пишу что-то вроде этого:

@JsonProperty("bytes_arrays") 
    private List<byte[]> mArraysList = new ArrayList<>(); 

, но, конечно, мы будем иметь ошибку синтаксического анализа для последнего элемента со значением «None», потому что это строка.

Есть ли способы извлечь многотипное поле в этом JSON? Мы используем Джексона.

+0

Возможный дубликат [Deserializing JSON с несколькими типами в одном поле] (http://stackoverflow.com/questions/13891415/deserializing-json-with-multiple-types-in-one-field) – Arkadiy

+0

Что вы здесь видите? недействителен JSON. – Henry

+0

так, я пропустил скобку, а не сервер вернулся – b00blik

ответ

1

В конце строки JSON отсутствовала скобка. Фиксированные и отформатирован это выглядит следующим образом:

{ 
    'jsonrpc' : '2.0', 
    'id' : 31, 
    'result' : { 
     "bytes_arrays" : [ 
          [ 21, 99, 165, 243, 25, 210, 14, 121, 120, 39, 22, 102, 59 ], 
          [ 22, 32, 42, 54, 65, 65, 76, 87 ], 
          None 
         ] 
    } 
} 

Jackson должен быть в состоянии разобрать его в Map<String, Object>.

Затем вы можете проверить тип Object на instanceof и собрать свою логику.

+0

Спасибо! Это сработало для меня. В моей статье Джексон создал список LinkedHashMap! – b00blik

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