2011-12-17 64 views
3

嗨我有一个JSON文件,如下所示:获取JSON数组元素的Android

{"posts":[{"Latitude":"53.38246685","lontitude":"-6.41501535"}, 
{"Latitude":"53.4062787","lontitude":"-6.3767205"}]} 

,我可以做获得第一组纬度和lontitude坐标的以下内容:

JSONObject o = new JSONObject(s); 
JSONArray a = o.getJSONArray("posts"); 
o = a.getJSONObject(0); 
lat = (int) (o.getDouble("Latitude")* 1E6); 
lng = (int) (o.getDouble("lontitude")* 1E6); 

有没有人有如何获得所有纬度和经度值的想法?

任何帮助将不胜感激。

+0

经度。除非你不是控制数据的人...... – 2011-12-17 20:52:15

回答

9

的结果创建ArrayList S:

JSONObject o = new JSONObject(s); 
JSONArray a = o.getJSONArray("posts"); 
int arrSize = a.length(); 
List<Integer> lat = new ArrayList<Integer>(arrSize); 
List<Integer> lon = new ArrayList<Integer>(arrSize); 
for (int i = 0; i < arrSize; ++i) { 
    o = a.getJSONObject(i); 
    lat.add((int) (o.getDouble("Latitude")* 1E6)); 
    lon.add((int) (o.getDouble("lontitude")* 1E6)); 
} 

这将覆盖任何阵列尺寸,即使有两个以上的值。

+0

这是一个更好的答案。我只是想让你注意到索引参数。 – 2011-12-17 20:20:38

+0

干杯Binyamin Sharet,我正在尝试你建议的方式,但没有添加数组大小,非常感谢:) – 2011-12-17 21:25:06

+0

这里的JSONObject方法是什么? – 2014-10-29 07:14:55

0

信任我的记忆,我的常识......你试过:

o = a.getJSONObject(1); 

here

1

在下面的代码,我使用GSON为JSON字符串转换成Java对象,因为GSON能使用Object定义来直接创建所需类型的对象。

String json_string = {"posts":[{"Latitude":"53.38246685","lontitude":"-6.41501535"},{"Latitude":"53.4062787","lontitude":"-6.3767205"}]} 

JsonObject out = new JsonObject(); 
out = new JsonParser().parse(json_string).getAsJsonObject(); 

JsonArray listJsonArray = new JsonArray(); 
listJsonArray = out.get("posts").getAsJsonArray(); 

Gson gson = new Gson(); 
Type listType = new TypeToken<Collection<Info>>() { }.getType(); 

private Collection<Info> infoList; 
infoList = (Collection<Info>) gson.fromJson(listJsonArray, listType); 
List<Info> result = new ArrayList<>(infoList); 

Double lat,long; 
if (result.size() > 0) { 
      for (int j = 0; j < result.size(); j++) { 
       lat = result.get(j).getLatitude(); 
       long = result.get(j).getlongitude(); 
      } 

//Generic Class 
public class Info { 

    @SerializedName("Latitude") 
    private Double Latitude; 

    @SerializedName("longitude") 
    private Double longitude; 

    public Double getLatitude() { return Latitude; } 

    public Double getlongitude() {return longitude;} 

    public void setMac(Double Latitude) { 
     this.Latitude = Latitude; 
    } 

    public void setType(Double longitude) { 
     this.longitude = longitude; 
    } 
} 

这里的结果是在lat和long变量中获得的。