【问题标题】:JsonExeption when parsing local Json file解析本地 Json 文件时的 JsonExeption
【发布时间】:2019-04-23 04:01:47
【问题描述】:

我正在尝试使用本地 Json 文件在 google maps api 上显示标记。问题是我得到了这个错误。

W/System.err: org.json.JSONException: 值 {"predictions":[{"description":"GAME Paisley, High Street, Paisley, UK","id":"d4fafbac99296d0a545170bb9af984e6251ac917","matched_substrings":[{"length":4,"offset":0}],"place_id":"ChIJN0z6gTdJiEgREKQBicnWcAs","re​​ference":"ChIJN0z6gTdJiEgREKQBicnWcAs"" :{"main_text":"游戏 佩斯利","main_text_matched_substrings":[{"length":4,"offset":0}],"secondary_text":"High 英国佩斯利街"},"terms":[{"offset":0,"value":"GAME 佩斯利"},{"offset":14,"value":"高 街道"},{"offset":27,"value":"佩斯利"},{"offset":36,"value":"UK"}],"types":["establishment"]},{"描述":"游戏 格拉斯哥联合街, 联合街, 格拉斯哥, UK","id":"9579c1d2df7575a2eb479ccd987cf29ab0ab9c6e","matched_substrings":[{"length":4,"offset":0}],"place_id":"ChIJ2YlAjJ5GiEgRu7aBLOFlkkc","re​​ference":"ChIJ2YlAjJ5GiEgRu7aBLOFlkkc","structured_formatting :{"main_text":"游戏 格拉斯哥联盟 Street","main_text_matched_substrings":[{"length":4,"offset":0}],"secondary_text":"Union Street, Glasgow, UK"},"terms":[{"offset":0," value":"GAME 格拉斯哥联盟 Street"},{"offset":27,"value":"Union 街道"},{"offset":41,"value":"Glasgow"},{"offset":50,"value":"UK"}],"types":["establishment"]},{"描述":"游戏, 圣以诺广场,格拉斯哥, UK","id":"582edc64f3d6654d8ff9a8da364c37a8e0544102","matched_substrings":[{"length":4,"offset":0}],"place_id":"ChIJq2yljp5GiEgRpsnAfUFKGEA","re​​ference":"ChIJq2yljp5GiEgRpsnAfUFKGEA"," :{"main_text":"Game","main_text_matched_substrings":[{"length":4,"offset":0}],"secondary_text":"圣以诺广场,格拉斯哥, UK"},"terms":[{"offset":0,"value":"Game"},{"offset":6,"value":"Saint 以诺 Square"},{"offset":26,"value":"Glasgow"},{"offset":35,"value":"UK"}],"types":["establishment"]},{"描述":"游戏 格拉斯哥 King's Inch Road, King's Inch Road, 格拉斯哥, UK","id":"b60dbbc529f25226dfee4c05c80de8e92137588d","matched_substrings":[{"length":4,"offset":0}],"place_id":"ChIJv2Te_ENPiEgRknxQydZhR8Q","re​​ference":"ChIJv2Te_ENPiEgRknxQydZhR8Q :{"main_text":"游戏 格拉斯哥国王英寸 Road","main_text_matched_substrings":[{"length":4,"offset":0}],"secondary_text":"King's Inch Road, Glasgow, UK"},"terms":[{"offset":0,"value":"GAME Glasgow 王寸路"},{"offset":31,"value":"王寸 Road"},{"offset":49,"value":"Glasgow"},{"offset":58,"value":"UK"}],"types":["establishment"]},{"描述":"游戏, 考格伦路,格拉斯哥, UK","id":"86a4ed10b3b9b609f68533f1c47dc8f9ae5d2aee","matched_substrings":[{"length":4,"offset":0}],"place_id":"ChIJT3vEiYRIiEgR4EIqP8jmL6o","re​​ference":"ChIJT3vEiYRIiEgR4EIqP8jmLo6 :{"main_text":"GAME","main_text_matched_substrings":[{"length":4,"offset":0}],"secondary_text":"Cowglen 路,格拉斯哥, UK"},"terms":[{"offset":0,"value":"GAME"},{"offset":6,"value":"Cowglen Road"},{"offset":20,"value":"Glasgow"},{"offset":29,"value":"UK"}],"types":["establishment"]}],"状态":"确定"} org.json.JSONObject 类型的无法转换为 JSONArray W/System.err:在 org.json.JSON.typeMismatch(JSON.java:111) 在 org.json.JSONArray.(JSONArray.java:96) 在 org.json.JSONArray.(JSONArray.java:108) 在附近的places.pnai.uws.com.maplocation.MapsActivity$AsyncTaskGetMareker.doInBackground(MapsActivity.java:112) 在 附近places.pnai.uws.com.maplocation.MapsActivity$AsyncTaskGetMareker.doInBackground(MapsActivity.java:102)

    at android.os.AsyncTask$2.call(AsyncTask.java:304) W/System.err:     at

java.util.concurrent.FutureTask.run(FutureTask.java:237) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) W / System.err:在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:762)

这是我的地图活动代码

  @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
            // Obtain the SupportMapFragment and get notified when the map is ready to be used.
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);

        }
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;

            gps = new TrackGPS(MapsActivity.this);
            new AsyncTaskGetMareker().execute();
            /*
            if(gps.canGetLocation()){
                currentLoc= new LatLng(gps.getLatitude(),gps.getLongitude());
                Log.d(TAG, "onMapReady: Got Location: " +gps.getLatitude() + " " + gps.getLongitude());
                // Add a marker in Sydney and move the camera
                mMap.addMarker(new MarkerOptions()
                        .position(currentLoc)
                        .title("CurrentLocation"));
                Log.d(TAG, "onMapReady: Displaying Map");
                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentLoc,15));
            }else{
                gps.showAlert();
            }
            */
        }

        public String getJSONFromAssets() {
            String json = null;
            try {
                InputStream inputData = getAssets().open("gameStores.json");
                int size = inputData.available();
                byte[] buffer = new byte[size];
                inputData.read(buffer);
                inputData.close();
                json = new String(buffer, "UTF-8");
            } catch (IOException ex) {
                ex.printStackTrace();
                return null;
            }
            return json;
        }

        private class AsyncTaskGetMareker extends AsyncTask<String , String, JSONArray> {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected JSONArray doInBackground(String... strings) {
                String stationsJsonString = getJSONFromAssets();
                try {
                    JSONArray stationsJsonArray = new JSONArray(stationsJsonString);
                    return stationsJsonArray;
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                //This will only happen if an exception is thrown above:
                return null;
            }

            protected void onPostExecute (JSONArray result){
                if (result !=null){
                    for (int i =0; i <result.length(); i++){
                        JSONObject jsonObject= null;
                        try {
                            jsonObject= result.getJSONObject(i);
                            String name=jsonObject.getString("name");
                            String lat=jsonObject.getString("lat");
                            String lang=jsonObject.getString("lang");

                            drawMarker(new LatLng(Double.parseDouble(lat),
                                    Double.parseDouble(lang)), name);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }

            }

            private void drawMarker(LatLng point, String name) {
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(point);
                markerOptions.snippet(name);
                mMap.addMarker(markerOptions);
            }
        }

这是我的 json 文件

>

 {    "predictions" : [
>       {
>          "description" : "GAME Paisley, High Street, Paisley, UK",
>          "id" : "d4fafbac99296d0a545170bb9af984e6251ac917",
>          "matched_substrings" : [
>             {
>                "length" : 4,
>                "offset" : 0
>             }
>          ],
>          "place_id" : "ChIJN0z6gTdJiEgREKQBicnWcAs",
>          "reference" : "ChIJN0z6gTdJiEgREKQBicnWcAs",
>          "structured_formatting" : {
>             "main_text" : "GAME Paisley",
>             "main_text_matched_substrings" : [
>                {
>                   "length" : 4,
>                   "offset" : 0
>                }
>             ],
>             "secondary_text" : "High Street, Paisley, UK"
>          },
>          "terms" : [
>             {
>                "offset" : 0,
>                "value" : "GAME Paisley"
>             },
>             {
>                "offset" : 14,
>                "value" : "High Street"
>             },
>             {
>                "offset" : 27,
>                "value" : "Paisley"
>             },
>             {
>                "offset" : 36,
>                "value" : "UK"
>             }
>          ],
>          "types" : [ "establishment" ]
>       },
>       {
>          "description" : "GAME Glasgow Union Street, Union Street, Glasgow, UK",
>          "id" : "9579c1d2df7575a2eb479ccd987cf29ab0ab9c6e",
>          "matched_substrings" : [
>             {
>                "length" : 4,
>                "offset" : 0
>             }
>          ],
>          "place_id" : "ChIJ2YlAjJ5GiEgRu7aBLOFlkkc",
>          "reference" : "ChIJ2YlAjJ5GiEgRu7aBLOFlkkc",
>          "structured_formatting" : {
>             "main_text" : "GAME Glasgow Union Street",
>             "main_text_matched_substrings" : [
>                {
>                   "length" : 4,
>                   "offset" : 0
>                }
>             ],
>             "secondary_text" : "Union Street, Glasgow, UK"
>          },
>          "terms" : [
>             {
>                "offset" : 0,
>                "value" : "GAME Glasgow Union Street"
>             },
>             {
>                "offset" : 27,
>                "value" : "Union Street"
>             },
>             {
>                "offset" : 41,
>                "value" : "Glasgow"
>             },
>             {
>                "offset" : 50,
>                "value" : "UK"
>             }
>          ],
>          "types" : [ "establishment" ]
>       },
>       {
>          "description" : "Game, Saint Enoch Square, Glasgow, UK",
>          "id" : "582edc64f3d6654d8ff9a8da364c37a8e0544102",
>          "matched_substrings" : [
>             {
>                "length" : 4,
>                "offset" : 0
>             }
>          ],
>          "place_id" : "ChIJq2yljp5GiEgRpsnAfUFKGEA",
>          "reference" : "ChIJq2yljp5GiEgRpsnAfUFKGEA",
>          "structured_formatting" : {
>             "main_text" : "Game",
>             "main_text_matched_substrings" : [
>                {
>                   "length" : 4,
>                   "offset" : 0
>                }
>             ],
>             "secondary_text" : "Saint Enoch Square, Glasgow, UK"
>          },
>          "terms" : [
>             {
>                "offset" : 0,
>                "value" : "Game"
>             },
>             {
>                "offset" : 6,
>                "value" : "Saint Enoch Square"
>             },
>             {
>                "offset" : 26,
>                "value" : "Glasgow"
>             },
>             {
>                "offset" : 35,
>                "value" : "UK"
>             }
>          ],
>          "types" : [ "establishment" ]
>       },
>       {
>          "description" : "GAME Glasgow King's Inch Road, King's Inch Road, Glasgow, UK",
>          "id" : "b60dbbc529f25226dfee4c05c80de8e92137588d",
>          "matched_substrings" : [
>             {
>                "length" : 4,
>                "offset" : 0
>             }
>          ],
>          "place_id" : "ChIJv2Te_ENPiEgRknxQydZhR8Q",
>          "reference" : "ChIJv2Te_ENPiEgRknxQydZhR8Q",
>          "structured_formatting" : {
>             "main_text" : "GAME Glasgow King's Inch Road",
>             "main_text_matched_substrings" : [
>                {
>                   "length" : 4,
>                   "offset" : 0
>                }
>             ],
>             "secondary_text" : "King's Inch Road, Glasgow, UK"
>          },
>          "terms" : [
>             {
>                "offset" : 0,
>                "value" : "GAME Glasgow King's Inch Road"
>             },
>             {
>                "offset" : 31,
>                "value" : "King's Inch Road"
>             },
>             {
>                "offset" : 49,
>                "value" : "Glasgow"
>             },
>             {
>                "offset" : 58,
>                "value" : "UK"
>             }
>          ],
>          "types" : [ "establishment" ]
>       },
>       {
>          "description" : "GAME, Cowglen Road, Glasgow, UK",
>          "id" : "86a4ed10b3b9b609f68533f1c47dc8f9ae5d2aee",
>          "matched_substrings" : [
>             {
>                "length" : 4,
>                "offset" : 0
>             }
>          ],
>          "place_id" : "ChIJT3vEiYRIiEgR4EIqP8jmL6o",
>          "reference" : "ChIJT3vEiYRIiEgR4EIqP8jmL6o",
>          "structured_formatting" : {
>             "main_text" : "GAME",
>             "main_text_matched_substrings" : [
>                {
>                   "length" : 4,
>                   "offset" : 0
>                }
>             ],
>             "secondary_text" : "Cowglen Road, Glasgow, UK"
>          },
>          "terms" : [
>             {
>                "offset" : 0,
>                "value" : "GAME"
>             },
>             {
>                "offset" : 6,
>                "value" : "Cowglen Road"
>             },
>             {
>                "offset" : 20,
>                "value" : "Glasgow"
>             },
>             {
>                "offset" : 29,
>                "value" : "UK"
>             }
>          ],
>          "types" : [ "establishment" ]
>       }    ],    "status" : "OK" }

【问题讨论】:

    标签: android json google-maps


    【解决方案1】:

    org.json.JSONObject 无法转换为 JSONArray

    您的根节点是 JSONObject,但您正在使用 JSONArray 解析它。

    替换

    JSONArray stationsJsonArray = new JSONArray(stationsJsonString);
    

    JSONObject stationsJsonObject = new JSONObject(stationsJsonString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2018-11-01
      • 2012-08-22
      • 2017-12-23
      • 2021-01-19
      相关资源
      最近更新 更多