Разбор Json "безымянных" данных массива - PullRequest
0 голосов
/ 23 апреля 2019

Я получаю этот безымянный массив json

[ { "symbol": "AAPL", "price": 207.1, "updated_at": "2019-04-23 16:26:09" }, { "symbol": "FB", "price": 183.12, "updated_at": "2019-04-23 16:26:09" } ]

Но мой код работает с именованным массивом, например:

{
  "stocks": [
    {
      "symbol": "AAPL",
      "price": 205.98,
      "updated_at": "2019-04-23 15:18:25"
    },
    {
      "symbol": "FB",
      "price": 182.99,
      "updated_at": "2019-04-23 15:18:25"
    }
  ]
}

Я не знаю, как разобрать безымянный массив. Это работает только тогда, когда он назван, как это (я назвал акции массива данных json).

  try {
                            JSONArray jsonArray = response.getJSONArray("stocks");

Как я могу заставить его работать с безымянным массивом? Я хочу работать с первым закомментированным URL-адресом.

    private void jsonParse() {
       // String url = "https://financialmodelingprep.com/api/company/real-time-price/AAPL,FB,GOOG,RHT,NOK,INTC?datatype=json";
       String url = "https://api.myjson.com/bins/134wfc";
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        //I call the array stocks, but it doesn't have a name from the server, so it wont show.
                        try {
                            JSONArray jsonArray = response.getJSONArray("stocks");
                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject stock = jsonArray.getJSONObject(i);

                                String symBol = stock.getString("symbol");
                                int value = stock.getInt("price");

                                mTextViewResult.append(symBol + ", " + String.valueOf(value) + " $\n" );
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        mQueue.add(request);
    }
}

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вы можете напрямую запросить JSONArray, как вы указали в примере. Вот так:

JsonArrayRequest req = new JsonArrayRequest(Request.Method.GET, url, null,,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());

                        try {
                            // Parsing json array response
                            // loop through each json object
                            for (int i = 0; i < response.length(); i++) {

                                JSONObject object = (JSONObject) response
                                        .get(i);

                                //do rest of the code

                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(),
                                    "Error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }

                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });
0 голосов
/ 23 апреля 2019

Вы можете использовать метод .contains (), чтобы проверить, имеет ли позиция массива уникальное значение, ключ или строку, которую вы пытаетесь получить.

Проверьте этот пример.

public void retrieve(final ListView gv, final ProgressBar myProgressBar) {
        final ArrayList<Teacher> teachers = new ArrayList<>();

        myProgressBar.setIndeterminate(true);
        myProgressBar.setVisibility(View.VISIBLE);
        StringRequest stringRequest = new StringRequest(Request.Method.GET, PHP_MYSQL_SITE_URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Teacher teacher;
                try {

                    JSONArray jsonArray = new JSONArray(response);

                    for (int i = 0; i < jsonArray.length(); i++) {

                        JSONObject jsonObject;
                        jsonObject = jsonArray.getJSONObject(i);

                        if (!jsonObject.getString("shopName").contains(strUserName)) {

                        } else {


                            String name = jsonObject.getString("productName");
                            String description = jsonObject.getString("description");
                            String price = "Ksh " + jsonObject.getString("sellingPrice");
                            String productStatus = jsonObject.getString("productStatus");
                            String imageURL = jsonObject.getString("imagePath");
                            String buyingPrice = jsonObject.getString("buyingPrice");
                            String category = jsonObject.getString("category");
                            String brandName = jsonObject.getString("brandName");
                            String ID = jsonObject.getString("ID");

                            teacher = new Teacher(name, description, price, productStatus, brandName, buyingPrice, category,ID, imgUrl + "/uploads/" + imageURL);
                            teachers.add(teacher);
                        }

                        //SET TO SPINNER
                        adapter = new GridViewAdapter(c, teachers);
                        gv.setAdapter(adapter);
                        myProgressBar.setVisibility(View.GONE);
                    }

                } catch (JSONException e) {

                    myProgressBar.setVisibility(View.GONE);
                    Toast.makeText(c, "GOOD RESPONSE BUT JAVA CAN'T PARSE JSON IT RECEIEVED. "+e.getMessage(), Toast.LENGTH_LONG).show();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(c, "UNSUCCESSFUL :  ERROR IS : "+volleyError.getMessage(), Toast.LENGTH_LONG).show();
            }
        });

        RequestQueue requestQueue = Volley.newRequestQueue(ItemsActivity.this);
        requestQueue.add(stringRequest);



    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...