【问题标题】:How do I iterate over a JSONObject to find the last data point?如何遍历 JSONObject 以找到最后一个数据点?
【发布时间】:2020-08-27 06:22:00
【问题描述】:

我需要获取 JSONObject 中的最后一个元素,以检索我的代码为的对象:

val jsonObjectRequest = JsonObjectRequest(Request.Method.GET, url, null,
            Response.Listener { response ->
                Log.i("response", "Response: %s".format(response.toString()))

                var jsona: JSONObject = response.getJSONObject("daily")

            },
            Response.ErrorListener { error ->
                Log.i("error", "Error: %s".format(error.toString()))
            }
        )

所以我使用jsona 变量获取每日价值

{"1582934400000":12450,"1583020800000":12639,"1583107200000":12439,"1583193600000":12348,"1583280000000":12278,"1583366400000":12322,"1583452800000":12435}

是否有一种智能的方法来解析这些数据以找到值 ("1583452800000":12435) 或更优选的是 12435

似乎我只能通过知道字符串来访问对象内的数据,但字符串应该会改变,我只需要最后一个数据点。

获取具有最大键的元素(也是最后一个数据点):

var top: Long = 0
for (key in jsona.keys()){
            if (key.toLong() > top) {
            top = key.toLong()
      }
}

然后访问它

jsona.get(top.toString())

只是希望有一个更有效的解决方案。

【问题讨论】:

  • 依赖 JSON 对象中的属性顺序是有争议的(例如,参见stackoverflow.com/q/30076219/4636715)。那么,你有比位置最后更好的逻辑吗?像具有最低/最高数值的键
  • 是的,它总是具有最高值的键。
  • 如果您/API 团队正在构建这个 JSON,那么您应该创建元素数组。所以你可以很容易地得到最后一个元素。

标签: android json kotlin


【解决方案1】:

我已经用下面的代码测试成功了:

    int result = 0;
    String json = "{ \"1582934400000\": 12450, \"1583020800000\": 12639, \"1583452800000\": 12435}";
    try {
        JSONObject convertedObject = new JSONObject(json);
        Iterator<?> keys = convertedObject.keys(); 
        while (keys.hasNext()) {
            result = convertedObject.getInt((String) keys.next()); //result is 12435
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

你可以参考一下。

【讨论】:

    【解决方案2】:
    try {
        String json = "{ \"1582934400000\": 12450, \"1583020800000\": 12639, \"1583452800000\": 12435}";
        JSONObject obj = new JSONObject(json);
    
        Iterator<String> keyItr = obj.keys();
        String lastValue="";
    
        while(keyItr.hasNext()) {
            String key = keyItr.next();
            lastValue = obj.getString(key);
        }
    
        Log.d("last val=",lastValue);
    
    } catch (JSONException e) {
        e.printStackTrace();
    }
    

    可以反过来。

    【讨论】:

      猜你喜欢
      • 2023-01-22
      • 2012-02-27
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 2021-06-09
      • 2018-11-23
      相关资源
      最近更新 更多