有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JSON数组无法获取数据

从JSON来看,它是这样的:

"tracks":{  
      "track":[  
         {  
            "name":"Do I Wanna Know?",
            "duration":"272",
            "listeners":"711568",
            "mbid":"f1e57531-e0df-4b3e-938f-1ae30c5b1a11",
            "url":"http://www.last.fm/music/Arctic+Monkeys/_/Do+I+Wanna+Know%3F",
            "streamable":{  
               "#text":"0",
               "fulltrack":"0"
            },

我正在尝试获取轨道阵列中的第一个“名称”字段

我正试图通过以下代码获得它:

JSONArray pjesma = jsonObject.getJSONArray("track");
                        JSONObject imePjesme = pjesma.getJSONObject(0);
                        String pjesmaTekst = imePjesme.getString("name");

但它只是告诉我有No value for track

我做错了什么

完整代码:

   private void getData(String country){
        informacije.clear();
        String finalUrl = urlLeft+country+urlRight;

        JsonObjectRequest mainRequest = new JsonObjectRequest(Request.Method.GET, finalUrl, (JSONObject) null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONObject pjesmaObject = response.getJSONObject("tracks");
                    JSONArray pjesmaArray = pjesmaObject.getJSONArray("track");

                    for (int i = 0; i < pjesmaArray.length(); i++){
                        JSONObject jsonObject = pjesmaArray.getJSONObject(i);

                        // ARTIST
                        JSONObject imeIzvodjaca = jsonObject.getJSONObject("artist");
                        String izvodjacTekst = imeIzvodjaca.getString("name");

                        // PJESMA
                        JSONArray pjesma = jsonObject.getJSONArray("track");
                        JSONObject imePjesme = pjesma.getJSONObject(0);
                        String pjesmaTekst = imePjesme.getString("name");

                        //SLIKA
                        JSONArray imageArray = jsonObject.getJSONArray("image");
                        JSONObject largeImage = imageArray.getJSONObject(3);
                        String image = largeImage.getString("#text");

                        Informacije info = new Informacije();
                        info.setArtist(izvodjacTekst);
                        info.setTitle(pjesmaTekst);
                        info.setUrl(image);

                        informacije.add(info);
                    }

                    adapter.notifyDataSetChanged();

                } catch (JSONException e) {
                    e.printStackTrace();
                }

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

            }
        });

        AppController.getInstance().addToRequestQueue(mainRequest);
    }

JSON响应

06-23 14:43:38.167 16255-16255/com.darioradecic.topmusicandartists W/System.err: org.json.JSONException: No value for track
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at org.json.JSONObject.get(JSONObject.java:389)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at org.json.JSONObject.getJSONArray(JSONObject.java:584)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at com.darioradecic.topmusicandartists.MainActivity$1.onResponse(MainActivity.java:63)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at com.darioradecic.topmusicandartists.MainActivity$1.onResponse(MainActivity.java:48)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at com.安卓.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:72)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at com.安卓.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at 安卓.os.Handler.handleCallback(Handler.java:739)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at 安卓.os.Handler.dispatchMessage(Handler.java:95)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at 安卓.os.Looper.loop(Looper.java:211)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at 安卓.app.ActivityThread.main(ActivityThread.java:5389)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
06-23 14:43:38.170 16255-16255/com.darioradecic.topmusicandartists W/System.err:     at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:815)

共 (3) 个答案

  1. # 1 楼答案

    解决方案:

    对不起,我很笨!溶液很简单

    而不是:

    JSONArray pjesma = jsonObject.getJSONArray("track");
                            JSONObject imePjesme = pjesma.getJSONObject(0);
                            String pjesmaTekst = imePjesme.getString("name");
    

    所需要的只是:

    String pjesmaTekst = jsonObject.getString("name");
    
  2. # 2 楼答案

    试试这个:

    JSONObject pjesma = jsonObject.getJSONObject ("tracks");
    JSONArray imePjesme = pjesma.getJSONArray ("track");
    String pjesmaTekst = imePjesme.getJSONObject (0).getString("name");
    

    如果它不起作用,请发布jsonObject var的内容

  3. # 3 楼答案

    试试这个:

    JSONObject tracksObject = jsonObject.getJSONObject("tracks");
    JSONArray pjesma = tracksObject.getJSONArray("track");
    JSONObject imePjesme = pjesma.getJSONObject(0);
    String pjesmaTekst = imePjesme.getString("name");