Я знаю, что есть повторяющиеся вопросы. Несмотря на это, я не могу это понять.Объект JSON не найден в массиве JSON
Ниже представлен файл JSON, который я получаю от API. Мне нужно получить значение «год».
Ошибка я получаю:
message org.glassfish.jersey.server.ContainerException: org.json.JSONException: JSONArray[1] not found.
Что касается линии на Java:
JSONObject year = years.getJSONObject(1).getJSONObject("years");
Я также попытался:
JSONObject year = years.getJSONObject(1);
Почему этот код не работает ? Не index 1
ясно year
в years
массив?
JSON
{
"make": {
"id": 200000404,
"name": "Chevrolet",
"niceName": "chevrolet"
},
"model": {
"id": "Chevrolet_Camaro",
"name": "Camaro",
"niceName": "camaro"
},
"drivenWheels": "rear wheel drive",
"numOfDoors": "2",
"options": [],
"colors": [],
"manufacturerCode": "1EH67",
"price": {
"baseMSRP": 34180.0,
"baseInvoice": 32813.0,
"deliveryCharges": 900.0,
"usedTmvRetail": 17766.0,
"usedPrivateParty": 16321.0,
"usedTradeIn": 14755.0,
"estimateTmv": false,
"tmvRecommendedRating": 0
},
"categories": {
"market": "Performance",
"EPAClass": "Compact Cars",
"vehicleSize": "Midsize",
"primaryBodyType": "Car",
"vehicleStyle": "Convertible",
"vehicleType": "Car"
},
"vin": "2G1FC3D33C9165616",
"squishVin": "2G1FC3D3C9",
"years": [{
"id": 100531911,
"year": 2012,
"styles": [{
"id": 101395591,
"name": "LT 2dr Convertible w/2LT (3.6L 6cyl 6M)",
"submodel": {
"body": "Convertible",
"modelName": "Camaro Convertible",
"niceName": "convertible"
},
"trim": "LT"
}]
}],
"matchingType": "SQUISHVIN",
"MPG": {
"highway": "28",
"city": "17"
}
}
JAVA
public String vehicleData(@PathParam("vin") String vin,
@PathParam("key") String key) throws Exception {
GetVehicleJSON jsonData = new GetVehicleJSON(vin, key);
JSONObject data = jsonData.getVehicleData();
String name = data.getJSONObject("make").getString("name");
String highway = data.getJSONObject("MPG").getString("highway");
String city = data.getJSONObject("MPG").getString("city");
JSONArray years = data.getJSONArray("years");
JSONObject year = years.getJSONObject(1).getJSONObject("years");
String s = year.getString("year");
return name + " " + s + " " + highway + " " + city;
}
Фактически, 1 указывает на второй элемент в массиве, которого в этом случае не существует. 0 указывает на первый JSONObject, который содержит год. Таким образом, вы хотите 'years.getJSONObject (0)'. – Ares
Попробуйте 'JSONObject year = years.getJSONObject (0);'. Индексирование массива обычно начинается с '0', а не' 1'. –
@ Джонатан Лоновски не является объектом «id» в индексе 0? – NutellaAddict