我是初学者,尝试从资源文件中解析此json,但未成功。我可以读取json,但无法解析。
我的json:
{"kind": "response",
"columns": [
"name",
"kml_4326"
],
"rows": [
[
"Spain",
{
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
61.211,
35.65,
0.0
],
[
62.231,
35.271,
0.0
],
[
62.985,
35.404,
0.0
]... etc...
我的代码:
try {
InputStream is = getResources().openRawResource(R.raw.bb);
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
try {
JSONObject aJson = new JSONObject(writer.toString());
JSONArray json = aJson.getJSONArray("rows");
for (int i = 0; i < json.length(); i++) {
JSONObject object = json.getJSONObject(i); // problem is here
JSONObject bJson = new JSONObject(object.toString());
JSONArray cJson = new JSONArray(bJson);
JSONObject object1 = cJson.getJSONObject(1);
JSONArray geometry = object1.getJSONArray("geometry");
}
}
catch (JSONException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
//错误:JSONArray无法转换为JSONObject
org.json.JSONException: Value ["Spain",{"geometry":{"type":"Polygon","coordinates":[[[61.211,35.65,0],[62.231,35.271,0],[62.985,35.404,0],[63.194,35.857,0],[63.983,36.008,0],[64.546,36.312,0],[64.746,37.112,0],[65.589,37.305,0],[65.746,37.661,0],[66.217,37.394,0],[66.519,37.363,0],[67.076,37.356,0],[67.83,37.145,0],[68.136,37.023,0],[68.859,37.344,0],[69.196,37.151,0],[69.519,37.609,0],[70.117,37.588,0],[70.271,37.735,0],[70.376,38.138,0],[70.807,38.486,0],[71.348,38.259,0],[71.239,37.953,0],[71.542,37.906,0],[71.449,37.066,0],[71.845,36.738,0],[72.193,36.948,0],[72.637,37.048,0],[73.26,37.495,0],[73.949,37.422,0],[74.98,37.42,0],[75.158,37.133,0],[74.576,37.021,0],[74.068,36.836,0],[72.92,36.72,0],[71.846,36.51,0],[71.262,36.074,0],[71.499,35.651,0],[71.613,35.153,0],[71.115,34.733,0],[71.157,34.349,0],[70.882,33.989,0],[69.931,34.02,0],[70.324,33.359,0],[69.687,33.105,0],[69.263,32.502,0],[69.318,31.901,0],[68.927,31.62,0],[68.557,31.713,0],[67.793,31.583,0],[67.683,31.303,0],[66.939,31.305,0],[66.381,30.739,0],[66.346,29.888,0],[65.047,29.472,0],[64.35,29.56,0],[64.148,29.341,0],[63.55,29.468,0],[62.55,29.319,0],[60.874,29.829,0],[61.781,30.736,0],[61.699,31.38,0],[60.942,31.548,0],[60.864,32.183,0],[60.536,32.981,0],[60.964,33.529,0],[60.528,33.676,0],[60.803,34.404,0],[61.211,35.65,0]]]}}] at 0 of type org.json.JSONArray cannot be converted to JSONObject
at org.json.JSON.typeMismatch(JSON.java:100)
at org.json.JSONArray.getJSONObject(JSONArray.java:525)
我想解析此JSON数组。我该怎么办?
有人可以帮助我吗?
谢谢。
答案 0 :(得分:0)
那是一些糟糕的JSON,您可以控制吗?您在数组内的数组内有数组的问题。具体来说,您的错误是因为“行”是一个数组数组,因此您需要一个内部循环。
JSONObject aJson = new JSONObject(writer.toString());
JSONArray rowsArray = aJson.getJSONArray("rows");
for (int i = 0; i < rowsArray.length(); i++) {
JSONArray jsonArray = rowsArray.getJSONArray(i);
for(int x = 0; x < jsonArray.length(); x++){
JSONObject object = jsonArray.getJSONObject(x); // now it will be the entry for spain
JSONArray geometry = object.getJSONArray("geometry");
}
}
坐标更糟,因为您有一个由数组组成的数组,因此将需要大量循环。