Пример JSON в исходном вопросе был более 800 строк.Вот урезанная версия, которая сохраняет ту же структуру (но все еще длинна в 50 строк).
[
{
"id": 17529,
"name": "True Grit",
"posters": [
{
"image": {
"type": "poster",
"size": "original",
"height": 1500,
"width": 1000,
"url": "http://cf1.imgobject.com/posters/0be/4db5f8e65e73d67a840070be/true-grit-original.jpg",
"id": "4db5f8e65e73d67a840070be"
}
},
{
"image": {
"type": "poster",
"size": "w154",
"height": 211,
"width": 154,
"url": "http://cf1.imgobject.com/posters/284/4d559bb87b9aa15cf6001284/true-grit-w154.jpg",
"id": "4d559bb87b9aa15cf6001284"
}
}
],
"backdrops": [
{
"image": {
"type": "backdrop",
"size": "w1280",
"height": 720,
"width": 1280,
"url": "http://cf1.imgobject.com/backdrops/900/4d33ccea7b9aa177db007900/true-grit-w1280.jpg",
"id": "4d33ccea7b9aa177db007900"
}
},
{
"image": {
"type": "backdrop",
"size": "w1280",
"height": 720,
"width": 1280,
"url": "http://cf1.imgobject.com/backdrops/01f/4c90088b5e73d61ee900001f/true-grit-w1280.jpg",
"id": "4c90088b5e73d61ee900001f"
}
}
]
}
]
Как уже предлагалось, простым подходом будет использование Gson для десериализации JSON в структуру данных Java,и затем выполнить итерацию по структуре Java, чтобы выбрать целевые данные.В качестве альтернативы существуют, по крайней мере, две библиотеки Java-to / from-JSON, которые позволяют xpath-подобным запросам выбора просто извлекать только целевые данные, но они очень медленны по сравнению с другими библиотеками Java для чтения JSON, и они неПока еще не пользуется и не пользуется поддержкой сообщества, поэтому я бы их не рекомендовал.В любом случае, независимо от того, используете ли вы Gson или любую другую библиотеку Java-to / from-JSON, вам лучше определиться с критериями выбора, кроме номера строки.
Предполагая, что цель выбора включает URL-адресапервые два фона с размером w1280, ниже приведен пример использования Gson для его выполнения.
Ситуация немного усложняется тем, что структура JSON упаковывает один объект ответа в массив и упаковывает каждое изображениеобъекты в массиве.Итак, следующая структура данных Java просто точно соответствует этой структуре.
import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class Foo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
Type movieListType = new TypeToken<List<Movie>>() {}.getType();
List<Movie> movies = gson.fromJson(new FileReader("input.json"), movieListType);
// movies has just one Movie
Movie movie = movies.get(0);
// Find the first two Backdrop URLs with size = w1280
int foundCount = 0;
for (Backdrop backdrop : movie.backdrops)
{
if ("w1280".equals(backdrop.image.size))
{
System.out.println("URL Found: " + backdrop.image.url);
foundCount++;
if (foundCount == 2)
{
break;
}
}
}
}
}
class Movie
{
int id;
String name;
List<Poster> posters;
List<Backdrop> backdrops;
}
class Poster
{
Image image;
}
class Backdrop
{
Image image;
}
class Image
{
String type;
String size;
int height;
int width;
String url;
String id;
}
Примечание. Поскольку Poster и Backdrop имеют одинаковую точную структуру (они просто содержат ссылку на изображение), их можно легко объединить в однутип данных.