【问题标题】:How to parse Json without array name in Android Studio如何在Android Studio中解析没有数组名的Json
【发布时间】:2021-03-01 07:02:53
【问题描述】:

我是 Android 新手。我想创建一个元素周期表应用程序。我在 github 上找到了 json 文件和 url,但是 json 没有数组名称,我怎样才能得到对象。我正在关注 CS50 Android 轨道来编写此应用程序,但我正在使用另一个 Json 文件。教程链接https://youtu.be/OJQ8Cse6-Ss 下面是我的程序代码:

 public void loadElement()
{
    String url = "https://periodic-table-api.herokuapp.com/";
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray arr = new JSONArray(response);
                for (int i = 0;i < arr.length(); i++)
                {
                    JSONObject object = arr.getJSONObject(i);
                    element.add(new Element(
                            object.getString("name"),
                            object.getString("symbol")
                    ));
                }

                notifyDataSetChanged();
            } catch (JSONException e) {
                Log.e("example", "Json error");
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("example", "Element list error");
        }
    });

    requestQueue.add(request);
}

Json文件的urlhttps://periodic-table-api.herokuapp.com 下面是 Json 文件(这里只是前两个对象):

[{
"atomicMass": "1.00794(4)",
"atomicNumber": 1,
"atomicRadius": 37,
"boilingPoint": 20,
"bondingType": "diatomic",
"cpkHexColor": "FFFFFF",
"density": 0.0000899,
"electronAffinity": -73,
"electronegativity": 2.2,
"electronicConfiguration": "1s1",
"groupBlock": "nonmetal",
"ionRadius": "",
"ionizationEnergy": 1312,
"meltingPoint": 14,
"name": "Hydrogen",
"oxidationStates": "-1, 1",
"standardState": "gas",
"symbol": "H",
"vanDelWaalsRadius": 120,
"yearDiscovered": 1766},{
"atomicMass": "4.002602(2)",
"atomicNumber": 2,
"atomicRadius": 32,
"boilingPoint": 4,
"bondingType": "atomic",
"cpkHexColor": "D9FFFF",
"density": 0.0001785,
"electronAffinity": 0,
"electronegativity": "",
"electronicConfiguration": "1s2",
"groupBlock": "noble gas",
"ionRadius": "",
"ionizationEnergy": 2372,
"meltingPoint": "",
"name": "Helium",
"oxidationStates": "",
"standardState": "gas",
"symbol": "He",
"vanDelWaalsRadius": 140,
"yearDiscovered": 1868}]

【问题讨论】:

    标签: java android json object url


    【解决方案1】:

    响应有一个 JSONArray 作为根/顶部元素,因此 Response.Listener 的类型应该匹配它。 JSONArray 中的元素没有名称,因此您可以使用索引来检索它们:

    public void loadElement() {
        String url = "https://periodic-table-api.herokuapp.com/";
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            try {
                for (int i = 0; i < response.length(); i++)
                {
                    JSONObject object = response.getJSONObject(i);
                    element.add(new Element(
                            object.getString("name"),
                            object.getString("symbol")
                    ));
                }
    
                notifyDataSetChanged();
            } catch (JSONException e) {
                Log.e("example", "Json error");
            }
        }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("example", "Element list error");
            }
        });
    
        requestQueue.add(request);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2020-10-23
      • 2017-06-10
      • 1970-01-01
      • 2015-08-15
      相关资源
      最近更新 更多