Java 在android中解析JSON对象数组
我想从这个api调用中获取lineId、destinationName和timeToStation 有人能帮我举个例子吗?Java 在android中解析JSON对象数组,java,android,json,api,Java,Android,Json,Api,我想从这个api调用中获取lineId、destinationName和timeToStation 有人能帮我举个例子吗? [ { “$type”:“Tfl.Api.Presentation.Entities.Prediction,Tfl.Api.Presentation.Entities”, “id”:“-480785385”, “操作类型”:1, “车辆ID”:“BJ11DSX”, “naptanId”:“49009219W”, “车站名称”:“小伊尔福德巷”, “lineId”:“25”,
[
{
“$type”:“Tfl.Api.Presentation.Entities.Prediction,Tfl.Api.Presentation.Entities”,
“id”:“-480785385”,
“操作类型”:1,
“车辆ID”:“BJ11DSX”,
“naptanId”:“49009219W”,
“车站名称”:“小伊尔福德巷”,
“lineId”:“25”,
“lineName”:“25”,
“平台名称”:“B”,
“方向”:“入站”,
“轴承”:“245”,
“destinationNaptanId”:“,
“destinationName”:“牛津马戏团”,
“时间戳”:“2016-04-17T16:56:56.463Z”,
“timeToStation”:1534,
“当前位置”:“,
“朝向”:“东哈姆或庄园公园”,
“预期到达”:“2016-04-17T17:22:31Z”,
“时间生活”:“2016-04-17T17:23:01Z”,
“modeName”:“总线”
},
{
“$type”:“Tfl.Api.Presentation.Entities.Prediction,Tfl.Api.Presentation.Entities”,
“id”:“1992301652”,
“操作类型”:1,
“车辆ID”:“BJ11DVA”,
“naptanId”:“49009219W”,
“车站名称”:“小伊尔福德巷”,
“lineId”:“25”,
“lineName”:“25”,
“平台名称”:“B”,
“方向”:“入站”,
“轴承”:“245”,
“destinationNaptanId”:“,
“destinationName”:“牛津马戏团”,
“时间戳”:“2016-04-17T16:56:56.463Z”,
“timeToStation”:1159,
“当前位置”:“,
“朝向”:“东哈姆或庄园公园”,
“预期到达”:“2016-04-17T17:16:16Z”,
“时间生活”:“2016-04-17T17:16:46Z”,
“modeName”:“总线”
},
{
“$type”:“Tfl.Api.Presentation.Entities.Prediction,Tfl.Api.Presentation.Entities”,
“id”:“733078946”,
“操作类型”:1,
“车辆ID”:“BJ11DVG”,
“naptanId”:“49009219W”,
“车站名称”:“小伊尔福德巷”,
“lineId”:“25”,
“lineName”:“25”,
“平台名称”:“B”,
“方向”:“入站”,
“轴承”:“245”,
“destinationNaptanId”:“,
“destinationName”:“牛津马戏团”,
“时间戳”:“2016-04-17T16:56:56.463Z”,
“timeToStation”:790,
“当前位置”:“,
“朝向”:“东哈姆或庄园公园”,
“预期到达”:“2016-04-17T17:10:07Z”,
“时间生活”:“2016-04-17T17:10:37Z”,
“modeName”:“总线”
}
]
我的任务被打嗝了
@Override
protected JSONObject doInBackground(String... args){
JSONParser jsonParser = new JSONParser();
Log.i("URL", url);
JSONObject json = jsonParser.getJSONFromUrl(url);
if(json == null) {
Log.i("Json obj =" , "NULL");
}
else{
return json;
}
return new JSONObject();
}
@Override
protected void onPostExecute(JSONObject json){
progressDialog.dismiss();
//String shopName ="";
// String distance="";
try{
//Fetching JSON Array
Log.i("JSON", json.toString());
jsonData = new JSONArray(json);
Double arrivalTime= 0.0;
for(int i=0;i<json.length();i++) {
try {
JSONObject c = json.getJSONObject(i);
busNoArray.add(json.getString(TAG_LINEID));
destinationArray.add(json.getString(TAG_DESTINATION));
arrivalTime = json.getDouble(TAG_TIME) / 60;
arrivalTimeArray.add(arrivalTime);
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter = new BusTimeAdapter(BusTimeActivity.this,busNoArray, destinationArray, arrivalTimeArray);
mListView.setAdapter(adapter);`
@覆盖
受保护的JSONObject doInBackground(字符串…args){
JSONParser JSONParser=新的JSONParser();
Log.i(“URL”,URL);
JSONObject json=jsonParser.getJSONFromUrl(url);
if(json==null){
Log.i(“Json obj=”,“NULL”);
}
否则{
返回json;
}
返回新的JSONObject();
}
@凌驾
受保护的void onPostExecute(JSONObject json){
progressDialog.disclose();
//字符串shopName=“”;
//字符串距离=”;
试一试{
//获取JSON数组
Log.i(“JSON”,JSON.toString());
jsonData=新的JSONArray(json);
双到达时间=0.0;
对于(inti=0;i,首先确保已检索到JSON字符串
然后您可以轻松访问它们内部的属性,如
try {
JSONArray jsonArray = new JSONArray(json);
JSONObject obj = jsonArray.getJSONObject(0); //0 for just retrieving first object you can loop it
String myVehicleID = obj.getString("vehicleId"); //To retrieve vehicleId
//Similarly do it for others as well
} catch (JSONException e) {
e.printStackTrace();
}
您确定这是您的jsonLog.i(“json”,json.toString())吗
logged?您做的一切都错了。这只是为了确保它不是空响应。我不了解的是,当我的doInBackground返回一个对象时,如何访问数组中的对象,我不确定如何访问数组中的值。我添加了它作为答案,我使用0仅检索第一个对象,但您也可以循环它来检索其他。并添加了一些注释来澄清这些。希望对您有所帮助。请随意询问您是否有一些困惑。JSONArray=new-JSONArray(json);
说调用需要API级别19。我的最小API是9,所以我将您的代码修改为JSONArray=new-JSONArray(json.toString())
但它给了我一个运行时错误E/JSON解析器:解析dataorg.JSON.JSONException时出错:
有什么想法吗?是的,你需要在new JSONArray()
中作为参数传递字符串。这意味着你没有得到有效的JSON。请记录你的JSON.toString()
并粘贴输出。