2012-05-05 3 views
0

Вероятно, немного похож на это: deserializing json with arrays, а также я вслед за этим: Jackson multiple objects and huge json filesDeserialising массивы JSON в пределах объектов в пределах других объектов

JSON У меня есть довольно большой, так что упростили это звучит примерно так:

{ "foo"="bar", "x"="y", "z"=[{"stuff"="stuff"}, {"more"="stuff"}, ...], ... } 

у меня есть код, который выглядит следующим образом:

for (Iterator<Map> it = new ObjectMapper().readValues(new JsonFactory().createJsonParser(in), Map.class); it.hasNext();) { 
    doSomethingWith(it.next()); 
} 

Это прекрасно работает на Перебор объектов в файле, и я ок n получить любое значение, которое мне нравится от объекта, в котором я находится. Работает нормально, но массив просто возвращается как объект ArrayList. Поэтому я должен сделать что-то вроде:

ArrayList z = (ArrayList) it.next().get("z"); 
for (Object o : z) { 
    // Run mapper on o. 
    // Do stuff. 
} 

Я уверен, что это сработает, но для меня это кажется немного грязным. Есть ли способ лучше?

+0

Ох. Я уже понял это. Я сам отвечу через 8 часов, когда мне позволено: x Но суть в том, что первый запуск ObjectMapper уже делает все для меня, и мне просто нужно сказать java, что это карта, а не объект, и все это отличный. –

ответ

0

О, кричит. Похоже, что первый запуск ObjectMapper делает все для меня.

Так что я могу просто изменить свой код так:

ArrayList<Map> z = (ArrayList) it.next().get("z"); 
for (Map m : z) { 
    // Run mapper on o. 
    doSomethingWith(m.get("stuff"); 
} 

и все работает отлично.

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