Java 从Web服务器解析json数组

Java 从Web服务器解析json数组,java,android,json,Java,Android,Json,我将解析一个从web服务器到android应用程序的json数组 {"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.0819

我将解析一个从web服务器到android应用程序的json数组

{"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");}
JSONObject json=新的JSONObject(结果);
JSONArray jArray=json.getJSONArray(“级别”);
rlevel=newarraylist();
System.out.println(“****JARRAY*****”+JARRAY.length());

对于(int i=0;i请尝试以下操作:

//代码是保存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();
JSonObject json=new JsonParser().parse(code.getAsJsonObject();
JsonArray jArray=json.getAsJsonArray(“级别”);
rLevel=newarraylist();
//请注意size()方法的使用。没有为ArrayList定义length()方法
System.out.println(“****JARRAY*****”+JARRAY.size());

对于(int i=0;i此解析任务可以非常轻松地使用:

试试看{
JSONObject json=$.parseJSON(结果);
if(json.has(“Level”)){
Object[]data=$.makeArray(json.getJSONArray(“Level”);
用于(对象数据:数据){
JSONObject obj=(JSONObject)数据;
对象[]坐标=$.makeArray(obj.getJSONArray(“路由”);
对于(对象坐标:坐标){
Map Map=$.Map((JSONObject)coord);
双纬度=(双)地图获取(“纬度”);
双经度=(双)map.get(“lgn”);
//TODO:使用这些值做一些事情
}
}
}
否则{
Log.d(“JSON”,“结果不包含'Levels'变量”);
}
}
捕获(可丢弃的t){
t、 printStackTrace();
}

获得“级别”后,您也需要以与“级别”相同的方式获得“路由”,您能给我一个例子吗?我有一个错误[2013-07-29 04:02:13-ddmlib]断管java.io.IOException:sun.nio.ch.FileDispatcherImpl.write0(本机方法)在sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)在sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:94)和sun.nio.ch.IOUtil.write(IOUtil.java:65)中,唯一的问题是$.parseJSON(结果)-类型不匹配:无法从对象转换为JSONObject@user2352548,我假设结果是一个字符串。如果是这样,只需使用:
$.parseJSON((String)result)
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();
}