2013-07-29 70 views
0

JSON数组我会从网络服务器解析JSON数组到Android app.The阵列看起来像这样解析来自Web服务器

{"Level": 
     [ 
     {"route":[{"lat":38.889762,"lgn":-77.081764}, 
     {"lat":38.89096,"lgn":-77.081916}]}, 
     {"route":[{"lat":38.889762,"lgn":-77.081764}, 
     {"lat":38.89096,"lgn":-77.081916}]}, 
     {"route":[{"lat":38.889762,"lgn":-77.081764}, 
     {"lat":38.89096,"lgn":-77.081916}]} 
     ] 
} 

我的Java代码

 JSONObject json = new JSONObject(result); 
    JSONArray jArray = json.getJSONArray("Level"); 
    rlevel = new ArrayList<LatLng>(); 
    System.out.println("*****JARRAY*****"+jArray.length()); 

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


    JSONObject json_data = jArray.getJSONObject(i); 

    jlat = json_data.getDouble("lat"); 
    jlgn = json_data.getDouble("lgn");} 

而不是作品! ?任何想法后此我想每个路线保存到一个数组(等$计划[1] =从JSON第一路线,$计划[2] =从JSON第二路径)

+0

之后你拿“水平”,你需要让你与“水平”做“路线”也以同样的方式 – mt0s

+0

你能不能给我一个例? – user2352548

回答

0

尝试是这样的:

//代码是保存在JSON

JSonObject json= new JsonParser().parse(code).getAsJsonObject(); 
JsonArray jArray= json.getAsJsonArray("Level"); 
rLevel=new ArrayList<LatLng>(); 

//notice the use of the size() method. There is not length() method defined for ArrayList 
System.out.println("*****JARRAY*****"+jArray.size()); 

for(int i=0;i<jArray.size();i++){ 

//notice that inside the Level Array you have route-arrays 
    JSonObject level_item = jArray.get(i).getAsJsonObject(); 
    JSonArray route= level_item.getAsJSonArray("route"); 

//now I don't know exactly what data you want to extract, since there are 2 
//pairs of LatLng, for the first one: 
jlat = route.get(0).get("lat").getAsDouble(); 
jlgn= route.get(0).get("lgn").getASDouble(); 

的方法和一个JSONObjects确切名称往往从图书馆到另一个不同的字符串,但原理是一样的。

+0

我有这个错误[2013年7月29日4时02分13秒 - ddmlib]中断的管道 java.io.IOException的:断管 \t在sun.nio.ch.FileDispatcherImpl.write0(本机方法) \t在太阳.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) \t at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:94) \t at sun.nio.ch.IOUtil.write(IOUtil.java :65) – user2352548

0

这个解析任务可以很容易地使用droidQuery来完成:

try { 
    JSONObject json = $.parseJSON(result); 
    if (json.has("Level")) { 
     Object[] datas = $.makeArray(json.getJSONArray("Level")); 
     for (Object data : datas) { 
      JSONObject obj = (JSONObject) data; 
      Object[] coordinates = $.makeArray(obj.getJSONArray("route")); 
      for (Object coord : coordinates) { 
       Map<String, ?> map = $.map((JSONObject) coord); 
       double latitude = (Double) map.get("lat"); 
       double longitude = (Double) map.get("lgn"); 
       //TODO: do something with these values 
      } 
     } 
    } 
    else { 
     Log.d("JSON", "Result does not contain 'Levels' variable"); 
    } 
} 
catch (Throwable t) { 
    t.printStackTrace(); 
} 
+0

唯一的概率是在$ .parseJSON(结果) - 类型不匹配:无法从对象转换为JSONObject – user2352548

+0

@ user2352548,我认为结果是一个字符串。如果是这种情况,只需使用:'。.parseJSON((String)result)'。 – Phil

相关问题