2015-11-03 90 views
1

我有一个像Java的JSON返回数组作为值

{ 
    "endtime": 1446188340, 
    "interval": 60, 
    "metrics": { 
     "heartrate": { 
      "values": [ 
       88, 
       92, 
       88, 
       89, 
       86, 
       84, 
       82, 
       86, 
       97, 
       77, 
       81, 
       87, 
       83, 
       101, 
       96, 
       97, 
       123, 
       123, 
       127, 
       127, 
       127, 
       130, 
       134, 
       133, 
       129, 
       126, 
       121, 
       137, 
       141, 
       149, 
       144, 
       120, 
       104, 
       102, 
       100, 
       107, 
       116, 
       107, 
       98, 
       97, 
       115, 
       107, 
       106, 
       98 
      ] 
     } 
    }, 
    "starttime": 1446102000, 
    "timezone_history": [ 
     { 
      "offset": -7, 
      "start": 1446102000, 
      "timezone": "America\/Los_Angeles" 
     } 
    ] 
} 

一个JSON对象,我该如何获得心率数据,在“值”的数组?

如果我打印:

JSONObject a = new JSONObject(obj.getJSONObject("metrics").getJSONObject("heartrate")); 

我只是得到:

{} 

它似乎JSONArray是不是要么使用了正确的事情。我只想获得一系列我可以使用的双打。谢谢!

回答

0

我想这应该做的工作:

JSONObject main = new JSONObject(MyJsonString); 
JSONArray values = main.getJSONObject("metrics") 
        .getJSONObject("heartrate").getJSONArray("values"); 
2

JSON经验法则:


  • '['表示JSONArray节点的开始

  • '{'代表JSONObject

如果你的JSON节点与[开始,那么我们应该使用getJSONArray()方法。而如果节点以{开头,那么我们应该使用getJSONObject()方法。

这里是代码即可获得双精度值

public static ArrayList<Double> getHeartRates(String jsonString) throws JSONException { 
      ArrayList<Double> values = new ArrayList<>(); 
      // root JSON Object. 
      JSONObject jsonObject = new JSONObject(jsonString); 

      JSONObject metrics = jsonObject.getJSONObject("metrics"); 
      JSONObject heartRate = metrics.getJSONObject("heartrate"); 
      JSONArray valuesArray = heartRate.getJSONArray("values"); 

      for (int i = 0; i < valuesArray.length(); i++) {          
       values.add(valuesArray.getDouble(i)); 
      } 

      return values; 
     } 
+0

谢谢您的解决方案。那时我想知道你能否为我解决一些问题。 我以为JSON数组是JSON对象的数组,所以像[“key1”:value,“key2”:value,“key3”:value]。但我所拥有的是一个JSON对象,其值是一个数组,如“key1”:[1,2,3]。你为什么要调用[1,2,3] JSONArray?谢谢! – swagrov