У меня есть длинный json файл следующего формата:
[
{
"fsa_lights_per100g":{
"fat":"green",
"salt":"green",
"saturates":"green",
"sugars":"orange"
},
"id":"000095fc1d",
"ingredients":[
{
"text":"yogurt, greek, plain, nonfat"
},
{
"text":"strawberries, raw"
},
{
"text":"cereals ready-to-eat, granola, homemade"
}
],
"instructions":[
{
"text":"Layer all ingredients in a serving dish."
}
],
"nutr_per_ingredient":[
{
"fat":0.8845044000000001,
"nrg":133.80964,
"pro":23.110512399999998,
"sat":0.26535132,
"sod":81.64656,
"sug":7.348190400000001
},
{
"fat":0.46,
"nrg":49.0,
"pro":1.02,
"sat":0.023,
"sod":2.0,
"sug":7.43
},
{
"fat":7.415,
"nrg":149.25,
"pro":4.17,
"sat":1.207,
"sod":8.0,
"sug":6.04
}
],
"nutr_values_per100g":{
"energy":81.129461318947662,
"fat":2.1401392635158909,
"protein":6.9144365935655356,
"salt":0.055978167389859668,
"saturates":0.36534716195613937,
"sugars":5.0863410343614399
},
"partition":"train",
"quantity":[
{
"text":"8"
},
{
"text":"1"
},
{
"text":"1/4"
}
],
"title":"Yogurt Parfaits",
"unit":[
{
"text":"ounce"
},
{
"text":"cup"
},
{
"text":"cup"
}
],
"url":"http://tastykitchen.com/recipes/breakfastbrunch/yogurt-parfaits/",
"weight_per_ingr":[
226.796,
152.0,
30.5
]
},
]
Цель / объем вопроса:
- Импорт json файла в java в виде некоего массива / ArrayList / Json*, где я могу получить доступ к каждому рецепту с индексом и к отдельным полям рецепта как к атрибутам поля этого индекса.
- Используйте Gson, так как он в хорошем состоянии, легкий и хорошо документирован. Но это может быть спорным.
Производительность: для моих целей понадобятся только поля name
, ingredients
и instructions
, так что если есть способ отказаться от чтения других и увеличить производительность я буду более чем счастливым. Файл действительно длинный (> 1M наборов данных). Решения с дешевой памятью очень предпочтительны.
Я не хочу:
- создавать отдельный класс
recipe
из-за сложности (см. Производительность; это также убивает почти все учебные / примерные сценарии для меня) - парсинг какой-то длинной уродливой строки
Почему я задаю этот вопрос:
- Я опыт работы с java и json отдельно, но не понимаю их в сочетании. Меня смущают определения jsonado c JsonArray и JsonObject (является ли первый массив последним? Является ли последний именно тем, что я хочу?); Входит JsonElement, а меня нет.
- Я попробовал simple- json и нашел его действительно громоздким, плюс большая часть документации охватывает только v1. *, Которому около 10 лет. v3. * задокументировано, но не совсем понятно для меня.
- Я сбит с толку тем, что язык, который я люблю использовать в течение многих лет, похоже, не имеет встроенной поддержки такой базовой c конструкции, как json.
Я пытался:
- json -простой
много разных вариантов следующего, включая JsonArray, JsonParser, JsonObject:
BufferedReader br = Files.newBufferedReader(Paths.get(fileName));
Gson gson = new Gson();
Object json = gson.fromJson(br, Object.class);