我的问题与下面的问题几乎相同。
Get JSONArray without array name?
也忘记提及此线程:Parse json array android
我正在解析以下数据。 https://api.tfl.gov.uk/Line/Mode/tube%2Cdlr
我只需要提取“ id”和“ name”。就像上面的线程一样,数据被括在方括号中,但没有包含在特定的数组中。我需要解析一个JSON对象,然后在ArrayList中返回数据。我知道如何解析ArrayList。解析时,我是否创建JSON对象或JSON数组?是否可以创建和解析JSONObject,然后将其转换为数组并返回它?
在第一个示例中,他们使用HashMap。没有HashMap和GSON可以解析吗?在第二个线程中,他们使用try catch方法从Url中提取数据。我在单独的类中实现了BuildUrl方法。
P.S。我尚未测试代码。
JSONUtils类:
public class JSONUtils
{
/**
* Tag for the log messages
*/
private static final String LOG_TAG = JSONUtils.class.getSimpleName();
private static final String KEY_LINE_ID = "id";
private static final String KEY_LINE_NAME = "name";
public JSONUtils()
{
}
public static Lines extractFeatureFromJson (String linesJSON)
{
// If the JSON string is empty or null, then return early.
if (TextUtils.isEmpty(linesJSON)) {
return null;
}
Lines line = null;
try
{
// Create a JSONObject from the JSON file
JSONObject jsonObject = new JSONObject(linesJSON);
String id = "";
if (jsonObject.has("id"))
{
id = jsonObject.optString(KEY_LINE_ID);
}
String name = "";
if (jsonObject.has("name"))
{
name= jsonObject.optString(KEY_LINE_NAME);
}
line = new Lines(id, name);
}
catch (JSONException e)
{
// If an error is thrown when executing any of the above statements in the "try" block,
// catch the exception here, so the app doesn't crash. Print a log message
// with the message from the exception.
Log.e("QueryUtils", "Problem parsing lines JSON results", e);
}
// Return the list of lines
return line;
}
}
答案 0 :(得分:0)
您可以尝试以下操作:
您将必须通过您的回复,我只将您的所有回复都放在String
中。您可以代表自己传递来自API的响应。
String response="[{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"bakerloo\",\"name\":\"Bakerloo\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.303Z\",\"modified\":\"2018-12-11T17:06:05.303Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Bakerloo&serviceTypes=Regular\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"central\",\"name\":\"Central\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.3Z\",\"modified\":\"2018-12-11T17:06:05.3Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Central&serviceTypes=Regular\"},{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Night\",\"uri\":\"/Line/Route?ids=Central&serviceTypes=Night\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"circle\",\"name\":\"Circle\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.3Z\",\"modified\":\"2018-12-11T17:06:05.3Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Circle&serviceTypes=Regular\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"district\",\"name\":\"District\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.3Z\",\"modified\":\"2018-12-11T17:06:05.3Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=District&serviceTypes=Regular\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"dlr\",\"name\":\"DLR\",\"modeName\":\"dlr\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.303Z\",\"modified\":\"2018-12-11T17:06:05.303Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=DLR&serviceTypes=Regular\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"hammersmith-city\",\"name\":\"Hammersmith & City\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.297Z\",\"modified\":\"2018-12-11T17:06:05.297Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Hammersmith & City&serviceTypes=Regular\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"jubilee\",\"name\":\"Jubilee\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.297Z\",\"modified\":\"2018-12-11T17:06:05.297Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Jubilee&serviceTypes=Regular\"},{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Night\",\"uri\":\"/Line/Route?ids=Jubilee&serviceTypes=Night\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"metropolitan\",\"name\":\"Metropolitan\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.297Z\",\"modified\":\"2018-12-11T17:06:05.297Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Metropolitan&serviceTypes=Regular\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"northern\",\"name\":\"Northern\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.3Z\",\"modified\":\"2018-12-11T17:06:05.3Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Northern&serviceTypes=Regular\"},{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Night\",\"uri\":\"/Line/Route?ids=Northern&serviceTypes=Night\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"piccadilly\",\"name\":\"Piccadilly\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.3Z\",\"modified\":\"2018-12-11T17:06:05.3Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Piccadilly&serviceTypes=Regular\"},{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Night\",\"uri\":\"/Line/Route?ids=Piccadilly&serviceTypes=Night\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"victoria\",\"name\":\"Victoria\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.297Z\",\"modified\":\"2018-12-11T17:06:05.297Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Victoria&serviceTypes=Regular\"},{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Night\",\"uri\":\"/Line/Route?ids=Victoria&serviceTypes=Night\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}},{\"$type\":\"Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities\",\"id\":\"waterloo-city\",\"name\":\"Waterloo & City\",\"modeName\":\"tube\",\"disruptions\":[],\"created\":\"2018-12-11T17:06:05.297Z\",\"modified\":\"2018-12-11T17:06:05.297Z\",\"lineStatuses\":[],\"routeSections\":[],\"serviceTypes\":[{\"$type\":\"Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities\",\"name\":\"Regular\",\"uri\":\"/Line/Route?ids=Waterloo & City&serviceTypes=Regular\"}],\"crowding\":{\"$type\":\"Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities\"}}]\n";
try {
JSONArray jsArray=new JSONArray(response);
for(int i=0;i<jsArray.length();i++)
{
String id=jsArray.getJSONObject(i).getString("id");
String name=jsArray.getJSONObject(i).getString("name");
}
} catch (JSONException ex) {
ex.printStackTrace();
}
它将为您提供id
和name