【问题标题】:Issue parsing JSON array without key解析没有键的 JSON 数组的问题
【发布时间】:2014-06-24 02:32:43
【问题描述】:

我正在尝试使用 Google Places API,并且我基本上是在尝试解析 Json,而没有 json 中特定位置的密钥。

我能够解析所有数据并根据需要获取值。 虽然,我对该 json 中的某个部分有疑问。

这是 json 示例:

{
   "html_attributions":[],
   "results":[
      {
         "geometry":{
            "location":{
               "lat":somelat,
               "lng":somelng
            }
         },
         "icon":"someicon",
         "id":"someid",
         "name":"somename",
         "reference":"some_image_reference",
         "types":[
            "gas_station",
            "establishment"
         ],
         "vicinity":"Some Address"
      }
   ],
   "status":"OK"
}

现在,这里是 code sn-p 来获取我遇到问题的值:

JSONObject mainJSONObject = new JSONObject(mAppUtils.loadJSON(gasURL));
            JSONArray mainJSONArray = mainJSONObject.getJSONArray("results");

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

                JSONObject obj = mainJSONArray.getJSONObject(i);
                            if(obj!=null){

                            String value = obj.getString("types");

                            Log.d("ARRAY VALUE : ", value);
                            }


            }

在这里,代码运行良好,我能够获取数据。

主要问题是结果格式。这是一个示例:

06-23 22:03:51.762: D/ARRAY VALUE :(8074): ["car_repair","gas_station","establishment"]
06-23 22:03:51.782: D/ARRAY VALUE :(8074): ["convenience_store","food","store","car_repair","gas_station","establishment"]
06-23 22:03:51.782: D/ARRAY VALUE :(8074): ["gas_station","establishment"]

如您所见,我得到的结果格式如下:["car_repair","gas_station","establishment"]

有没有更好的方法来解析上面的 json 或者有什么方法可以替换其中的字符和大括号 ["car_repair","gas_station","机构"]

喜欢:

car_repair,gas_station,establishment 这样我就可以在任何其他视图的文本视图中使用它,而不会显示那些大括号和其他字符。

编辑:

    JSONObject mainJSONObject = new JSONObject(mAppUtils.loadJSON(gasURL));
            JSONArray mainJSONArray = mainJSONObject.getJSONArray("results");

                    for(int j=0;j<mainJSONArray.length();j++)
                   {

                    JSONObject jsonObject = mainJSONArray.getJSONObject(j);

                    JSONArray jsonArray = jsonObject.getJSONArray("types");

                    for(int ju=0;ju<jsonArray.length();ju++)
                     {
                          value =  jsonArray.getString(ju); 
                         Log.d("PLACE TYPES ARRAY VALUE : ", value);
                     } 

在此之后,这是我得到的结果:

06-23 22:53:44.928: D/PLACE TYPES ARRAY VALUE :(16322): car_repair
06-23 22:53:44.928: D/PLACE TYPES ARRAY VALUE :(16322): gas_station
06-23 22:53:44.928: D/PLACE TYPES ARRAY VALUE :(16322): establishment
06-23 22:53:44.928: D/PLACE TYPES ARRAY VALUE :(16322): convenience_store
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): food
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): store
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): car_repair
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): gas_station
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): establishment
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): gas_station
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): establishment

但问题是,我如何将这些值与他们尊重的 json 数组分开。

任何帮助将不胜感激.. 谢谢.. :)

【问题讨论】:

  • "types":[ 是一个 JSONArray
  • 我明白这一点,但我也尝试使用 JSONArray 并且确实得到了结果,但由于某种原因,然后我执行 JSONArray typesJsonArray = obj.getJSONArray("types");字符串值 = typesJsonArray.getString(i);它给了我错误。
  • 你有一个数组类型,你必须遍历那个数组

标签: android json google-places-api arrays


【解决方案1】:

可以循环遍历数组,根据索引获取值

 for(int i=0;i<jsonarray.length().i++)
 {
        String value = (String) jsonarray.get(i); // Note the cast
 } 

您也可以使用getString(i)getInt(i)

而不是这个

 String value = obj.getString("types"); 

 JSONArray jsonarray = obj.getJSONArray("types");

 for(int j=0;j<jsonarray.length();j++)
 {
        String value =  jsonarray.getString(j); 
 }  

编辑 2:

 ArrayList<HashMap<String,String>> list = new  ArrayList<HashMap<String,String>>();

然后在for循环中

 HashMap<String,String> map = new HashMap<String,String>():
 map.put("key",value);
 list.add(map)

得到

HashMap<String,String> map =  (HashMap<String,String> ) list.get(0);// 0 is the index of item
String value =(String)map.get("key");

【讨论】:

  • 不能使用 JSONArray jsonarray = obj.getJSONArray("types") 因为“types”是结果数组的一部分。问题是,我也可以使用我的代码获取值,但同样,它都包含在大括号中。
  • @mike20132013 types 是一个 jsonarray,因此循环遍历它并获取值,查看已编辑的部分,它应该可以正常工作。记录字符串的值并检查。没有大括号
  • @mike20132013 你在结果数组之后有一个 json 对象节点,它在哪里关闭/结束?到此结束"vicinity":"Some Address" }
  • 提供的 json 只是一个 JSON 样本。我编辑了我的问题,我得到了值。但是仍然不清楚没有key就解析json的概念。
  • @mike20132013 其简单的[ 代表json 数组节点,{ 代表json 对象节点。如果您有一个密钥对,您将通过 key 获得值。你所拥有的是一个只有值的类型数组。遍历数组并获取值。什么你还不明白??
猜你喜欢
  • 2018-06-08
  • 1970-01-01
  • 2019-08-05
  • 2020-01-17
  • 2015-08-15
  • 2015-06-04
  • 2019-01-29
  • 1970-01-01
  • 2019-09-22
相关资源
最近更新 更多