为了账号安全,请及时绑定邮箱和手机立即绑定

Android - JSON 解析不使用“setText”显示数据

Android - JSON 解析不使用“setText”显示数据

慕容3067478 2021-09-15 14:16:43
我有以下 JSON 信息。{    "version": 2,    "locations": [{        "id": "750",        "geo": {            "name": "Lord Howe Island",            "state": "Lord Howe Island",            "country": {                "id": "au",                "name": "Australia"            },            "latitude": -31.557,            "longitude": 159.086        },        "astronomy": {            "objects": [{                "name": "moon",                "days": [{                    "date": "2018-09-05",                    "events": [],                    "moonphase": "waningcrescent"                }]            }]        }    }]}我想要做的是将 JSON 中的一些细节(不是全部)打印到 textView,所以我想要的输出如下:名称:豪勋爵岛国家:澳大利亚月相:残月但是,在解析要在 textView 中打印的信息时,我没有任何运气。我目前正在使用以下代码:JSONArray JA = new JSONArray(data);        for (int i = 0; i < JA.length(); i++) {            JSONObject JO = (JSONObject) JA.get(i);            JSONObject geo = JO.getJSONObject("geo");            JSONObject astronomy = JO.getJSONObject("astronomy");            singleParsed = "Name:" + geo.get("name") + "\n" +                    "Latitude:" + JO.get("latitude") + "\n" +                    "Longitude:" + JO.get("longitude") + "\n" +                    "Phase: " + astronomy.get("moonphase") + "\n";        }然后显示数据如下:protected void onPostExecute(Void aVoid) {        super.onPostExecute(aVoid);        MainActivity.fetcheddata.setText(this.singleParsed);    }}我可以只使用打印所有数据MainActivity.fetcheddata.setText(this.data);但是我也看到了 textView 和 ALL Information 中的标签,而不是我所追求的几个标签。我究竟做错了什么?非常感谢所有帮助
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

您遇到的问题是您正在尝试使用 JSONObjects,即使位置是一个数组,对象也是如此。


为此,您需要像这样迭代数组:


    JSONObject jo = new JSONObject(yourData);

    JSONArray locations = jo.getJSONArray("locations");


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

        //iterate over each key, etc.

    }

在我看来,在一天结束时,如果您更改密钥、添加密钥等,这将是一团糟,并且维护起来很痛苦。我建议您查看 GSON 之类的东西,然后只创建数据的视图模型你要。最后你会得到这样的东西:


List<T> yourObjects = gson.fromJson(jsonReader, X[].class);

然后您可以单独访问您想要的任何属性。


查看完整回答
反对 回复 2021-09-15
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

假设您的 json 数据原样以及您在上面写的输出:


    JSONArray locations = data.getJSONArray("location");

    JSONObject loc = locations.getJSONObject(0);

    JSONObject geo = loc.getJSONObject("geo");


    JSONObject country = geo.getJSONObject("country");


    JSONObject astronomy = loc.getJSONObject("astronomy");

    JSONObject objects = astronomy.getJSONArray("objects").getJSONObject(0);

    JSONObject day = objects.getJSONArray("days").getJSONObject(0);


    StringBuilder result = new StringBuilder();

    String singleParsed = "Name:" + geo.getString("name") + "\n" +

            "Country: " + country.getString("name") +

            "Moon Phase: " + astronomy.getString("moonphase") + "\n";


查看完整回答
反对 回复 2021-09-15
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

不能moonphase直接从astronomy, []将定义一个数组,所以你可以这样做:


            "astronomy": {

                "objects": [{

                    "name": "moon",

                    "days": [{

                        "date": "2018-09-05",

                        "events": [],

                        "moonphase": "waningcrescent"

                    }]

                }]

            }

JSONObject astronomy = JO.getJSONObject("astronomy");

JSONArray objects = astronomy.getJSONArray("objects");

JSONArray days = objects.getJSONObject(0).getJSONArray("days");

JSONObject moonphase = days.getJSONObject(0).get("moonphase");


查看完整回答
反对 回复 2021-09-15
  • 3 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信