Получение значения из сложного файла JSON (несколько объектов внутри объекта) - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь получить значение из файла JSON, однако это сложный файл JSON, и я не уверен, как go узнать об этом.

Значение находится внутри объекта, который находится внутри другого объекта, который находится внутри другого объекта.

Значения, которые я хочу получить из файла JSON, это "значение" и "единица измерения", расположенные внутри объекта "metri c ». Я был в состоянии успешно получить значение «имя».

Файл JSON:

    {
  "ingredients": [
    {
      "name": "breakfast sausage",
      "image": "breakfast-sausage-links.jpg",
      "amount": {
        "metric": {
          "value": 226.796,
          "unit": "g"
        },
        "us": {
          "value": 8,
          "unit": "ounces"
        }
      }
    },

Я также включу метод синтаксического анализа JSON из:

private void jsonParse(){
    String url = "https://api.spoonacular.com/recipes/"+ rMealId + "/ingredientWidget.json?&apiKey=da7dd16a704f4552b70a96c1e9641b08";

    RequestQueue requestQueue = Volley.newRequestQueue(this);

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray jsonArray = response.getJSONArray("ingredients");

                        for(int i = 0; i < jsonArray.length(); i++){
                            JSONObject ingredients = jsonArray.getJSONObject(i);
                            String iName = ingredients.getString("name");

                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
            Log.e("Volley", error.toString());
        }
    });
    requestQueue.add(request);
}

1 Ответ

0 голосов
/ 10 марта 2020

Просто фокусируясь на вашей json строке, попробуйте это:

let ings =
 {
  "ingredients": [
    {
      "name": "breakfast sausage",
      "image": "breakfast-sausage-links.jpg",
      "amount": {
        "metric": {
          "value": 226.796,
          "unit": "g"
        },
        "us": {
          "value": 8,
          "unit": "ounces"
        }
      }
    }
  ]
}

let jp = require('jsonpath');
let eat = jp.query(ings, '$..metric.*');
console.log(eat);

output:

[226.796, 'g']

...