从内部资源文件解析json

时间:2019-08-21 18:50:34

标签: android arrays json

我是初学者,尝试从资源文件中解析此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数组。我该怎么办?

有人可以帮助我吗?

谢谢。

1 个答案:

答案 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");
        }

    }

坐标更糟,因为您有一个由数组组成的数组,因此将需要大量循环。