【问题标题】:Get Elements of JSON Array Android获取 JSON 数组 Android 的元素
【发布时间】:2012-01-22 18:36:02
【问题描述】:

我有一个如下所示的 JSON 文件:

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

我可以通过执行以下操作获得第一组经纬度坐标:

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); 

有人知道如何获取所有纬度和经度值吗?

任何帮助将不胜感激。

【问题讨论】:

  • 经度。除非您不是控制数据的人...

标签: java android json


【解决方案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 变量中获得的。

【讨论】:

    【解决方案2】:

    相信我的记忆和常识……你试过了吗:

    o = a.getJSONObject(1);
    

    here

    【讨论】:

      【解决方案3】:

      为结果创建ArrayLists:

      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));
      }
      

      这将涵盖任何数组大小,即使有两个以上的值。

      【讨论】:

      • 这是一个更好的答案。我只是想让你注意 index 参数。
      • Cheers Binyamin Sharet,我正在尝试您建议的方式,但没有添加数组大小,非常感谢 :)
      • JSONObject 方法中的“s”是什么??
      • s 是要解析的 JSON 字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多