JSONArray在不同设备上的奇怪输出

时间:2015-05-15 07:05:16

标签: android json

我有以下字符串

 [{"SUBSCRIBERID":"151-52-049","LONG":"46.69127274","LAT":"24.70912743"},{"SUBSCRIBERID":"151-29-016","LONG":46.69570000","LAT":"24.70770000"}]

我正在将此String转换为JSONArray

JSONArray jsonArrr = new JSONArray(String);

然后循环数组并获取JSONObject

for (int h = 0; h < jsonArrr.length(); h++) {

    jsonObj = jsonArrr.getJSONObject(h);
    Iterator<String> iter = jsonObj.keys();
    Object valuee = "";
    String key = iter.next();
    Log.e(TAG, "key is: " + key);
    try {

        valuee = jsonObj.get(key);
        Log.e(TAG, "key: " + key + "---value: " + valuee);   //on htc key is SUBSCRIBERID and its value while on samsung key is LONG and its valuee!!
    } catch (JSONException e) {

        Log.e(TAG,"SOME ERROR: "+e);
    }

在此for循环中,检索的值是每个对象中的第一个值。 在我的HTC手机上,第一个值正确显示为在三星设备上购买SUBSCRIBERID的值,第一个值显示为LONG。

请任何帮助将不胜感激!!

3 个答案:

答案 0 :(得分:2)

未定义键的顺序。因此,如果您在不同设备上执行代码,您可能会看到不同顺序的密钥。 REF

  

返回此对象中String名称的迭代器。返回的迭代器支持remove,这将从该对象中删除相应的映射。如果在返回迭代器后修改了此对象,则迭代器的行为是未定义的。键的顺序是未定义的。

答案 1 :(得分:0)

在评论及上述回答

中提及时不使用Iterator
    for (int h = 0; h < jsonArrr.length(); h++) {

      jsonObj = jsonArrr.getJSONObject(h);
//    Iterator<String> iter = jsonObj.keys();
//   Object valuee = "";
//    String key = iter.next();
//    Log.e(TAG, "key is: " + key);
//    try {  
//        valuee = jsonObj.get(key);
//        Log.e(TAG, "key: " + key + "---value: " + valuee);   //on htc key is SUBSCRIBERID and its value while on samsung key is LONG and its valuee!!
//    } catch (JSONException e) {   
//        Log.e(TAG,"SOME ERROR: "+e);
//    }      
    // use this code
    String value = jsonObj.getString("SUBSCRIBERID");
    Long lat = jsonObj.getLong("LAT");
    Long long = jsonObj.getLong("LONG");    
    Log.d("json","subscribed:"+value+",lat"+lat+",long:"+long);

答案 2 :(得分:0)

var label = $("label");
$("label").each(function () {
    $(this).html("Your" + $(this).text())
});

尝试运行此