Разобрать файл json в легко доступное поле с помощью gson в java. Сделай это дешево - PullRequest
0 голосов
/ 06 марта 2020

У меня есть длинный 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);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...