使用Android解析JSON的最有效方法

时间:2012-03-12 15:30:57

标签: android json

我编写了一些代码来解析我的Android程序收到的Google Distance Matrix JSON响应。我唯一感兴趣的数据是“距离”“值”节点。

我的代码有效,但似乎必须有一种更简单的方法来执行此操作。距离值节点嵌套在JSON内部,但是真的有必要遍历JSON的每一层才能到达你想要的字段吗?

这是我的JSON回复:

{
"destination_addresses" : [
  "5660 Baltimore National Pike, Ingleside Shopping Center, Catonsville, MD 21228, USA"
],
"origin_addresses" : [ "Hilltop Cir, Baltimore, MD 21250, USA" ],
"rows" : [
  {
     "elements" : [
        {
           "distance" : {
              "text" : "3.1 mi",
              "value" : 4922 <--THE FIELD I WANT TO EXTRACT
           },
           "duration" : {
              "text" : "11 mins",
              "value" : 666
           },
           "status" : "OK"
        }
     ]
  }
],
"status" : "OK"
}

这是我用来拉出距离值的代码:

    private double extractDistance(JSONObject json) {
    JSONArray rowsArray = null;
    double distanceInMiles = -1;
    try {
        // Getting Array of Distance Matrix Results
        rowsArray = json.getJSONArray("rows");
        JSONObject rowsObject = rowsArray.getJSONObject(0);//only one element in this array
        JSONArray elementsArray = rowsObject.getJSONArray("elements");
        JSONObject elementsObject = elementsArray.getJSONObject(0);//only one element in this array
        JSONObject distanceObject = elementsObject.getJSONObject("distance");
        distanceInMiles = (distanceObject.getDouble("value"))/1609.344; //distance in meters converted to miles
    }
    catch (JSONException e) {
        e.printStackTrace();
    }
    return distanceInMiles;
}

谢谢!

5 个答案:

答案 0 :(得分:6)

我建议您使用GSON(http://code.google.com/p/google-gson/)将JSON文本解析为java类实例,并将类实例转换为JSON文本

答案 1 :(得分:6)

杰克逊是另一个很好的第三方解析器http://jackson.codehaus.org/。看起来这里有一个比较,http://www.cowtowncoder.com/blog/archives/2009/09/entry_326.html

以下是使用树进行遍历的示例,不确定它是否比您正在执行的操作更容易,http://wiki.fasterxml.com/JacksonTreeModel

答案 2 :(得分:3)

除非您想编写自定义正则表达式来搜索json字符串,否则这将是访问它的最佳方式(也是最简单的方法)。您是否有理由认为自己需要“更有效”地访问它?

答案 3 :(得分:3)

如果您愿意加入第三方图书馆,可以查看http://code.google.com/p/json-path/

答案 4 :(得分:2)

我知道你现在的感受,我在Android上遇到了与JSON解析相同的问题我们没有@getValueforKey嵌入在iOS上的那些功能,即使它如此明显的谷歌应该现在意识到它,但是有在Gson lib上做了很好的工作,寻找Google Gson Here以便轻松解析json

这是一个很好的声音:Gson tute