【问题标题】:get many value from json从 json 中获得许多价值
【发布时间】:2011-07-09 12:59:59
【问题描述】:

我需要获取我的 android 的纬度和经度,它有很多这样的值:

我试过这个从 JSON 中获取值:

ArrayList<String> longitude;
ArrayList<String> latitude;

public void parseJson(String result) {
        try {
            JSONArray jArray = new JSONArray(result);
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject jo = jArray.getJSONObject(i);
                latitude.add(jo.getString("Latitude").toString());
                longitude.add(jo.getString("Longitude").toString());
            }
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }
    }

但是当我检查数组的大小时,它是空的。 任何人都可以帮助或建议我的错误吗?谢谢

@修改后,我仍然得到 0 大小的数组。所以,我试图通过 Toast 搜索它在哪里停下,然后我找到了:

public void parseJson(String result) throws JSONException {

        longitude = new ArrayList<String>();
        latitude = new ArrayList<String>();

        JSONArray jArray = (JSONArray)JSONValue.parse(result);

        for (Object obj: jArray) {

            JSONObject jo = (JSONObject)obj;
            //here is when I toast it's got nothing
            latitude.add(jo.get("Latitude").toString());
            longitude.add(jo.get("Longitude").toString());
        }

    }

@aroth 我有答案了!!我回来使用我的方式:

public void parseJson(String result) throws JSONException {

        longitude = new ArrayList<String>();
        latitude = new ArrayList<String>();
        JSONArray jArray = new JSONArray(result);
        for (int i = 0; i < jArray.length(); i++) {
            JSONObject jo = jArray.getJSONObject(i);
            latitude.add(jo.getString("Latitude").toString());
            longitude.add(jo.getString("Longitude").toString());
        }

我想我忘了声明这些:

         longitude = new ArrayList<String>();
         latitude = new ArrayList<String>();

我仍然不知道为什么您的代码不起作用。但是,非常感谢您的帮助:))

【问题讨论】:

    标签: android json arraylist location


    【解决方案1】:

    json.org 库的get&lt;Type&gt; 方法毫无意义地抛出JSONException,我建议切换到simple-json。然后你可以这样做:

    ArrayList<String> longitude;
    ArrayList<String> latitude;
    
    public void parseJson(String result) {
        longitude = new ArrayList<String>();
        latitude = new ArrayList<String>();
        JSONArray jArray = (JSONArray)JSONValue.parse(result);
        for (Object obj : jArray) {
            JSONObject jo = (JSONObject)obj;
            latitude.add(jo.get("Latitude").toString());
            longitude.add(jo.get("Longitude").toString());
        }
    
    }
    
    //a simple test case
    public static void main(String[] args) {
        String json = "[{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}, \n{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}, \n{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}]";    
        MyParser parser = new MyParser();
        parser.parseJson(json);
    
        //should print:  3, 3
        System.out.println(parser.latitude.size() + ", " + parser.longitude.size());
    }
    

    应该可以,假设您的输入 JSON 与您的示例 sn-p 匹配。

    【讨论】:

    • 它在 JSONValue 处出错(似乎它没有这个类)和在 jArray 处 for(Object obj: jArray) “只能迭代一个数组或 java.lang.Iterable 的一个实例”
    • @Daisy - 是的,正如我提到的,您首先需要摆脱当前使用的 json.org 库,并将其替换为 simple-json 版本。然后(假设您使用的是 Eclipse)只需执行 Ctrl + Shift + O 来修复您的导入,您应该一切顺利。
    • 抱歉,但是 for(Object obj: jArray) 处的 jArray 仍然出现错误
    • @Daisy - 可能并非所有导入都已清理。你能检查你的导入并确认你有org.json.simple.JSONArray没有org.json.JSONArray吗?
    • 我修复了导入。当我检查大小时,它是 0(零)。
    【解决方案2】:

    尝试使用 gson 库。它紧凑而快速。

    https://sites.google.com/site/gson/gson-user-guide

    【讨论】:

    • gson 可以将通用 JSON 对象反序列化为 Map,还是需要为要反序列化的每种 JSON 对象指定一个具体的容器类?
    • Gson 没有内置机制将任意复杂的 JSON 对象反序列化为 Map。这样做需要手动处理。 Jackson 只需一行简单的代码就可以做到这一点。我在programmerbruce.blogspot.com/2011/06/gson-v-jackson.html 发布了使用 Gson 和 Jackson 执行此操作的示例 搜索短语“一行简单的代码”。
    猜你喜欢
    • 2018-05-07
    • 2020-06-25
    • 2022-01-16
    • 2020-01-12
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多