JsonExeption when parsing local Json file

谁说我不能喝 提交于 2019-12-13 03:25:01

问题


I am trying to use a local Json file to display markers on the google maps api. The problem is that i get this error.

W/System.err: org.json.JSONException: Value {"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"} of type org.json.JSONObject cannot be converted to JSONArray W/System.err: at org.json.JSON.typeMismatch(JSON.java:111) at org.json.JSONArray.(JSONArray.java:96) at org.json.JSONArray.(JSONArray.java:108) at nearbyplaces.pnai.uws.com.maplocation.MapsActivity$AsyncTaskGetMareker.doInBackground(MapsActivity.java:112) at nearbyplaces.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) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:762)

This is my Map activity Code

  @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);
            }
        }

This is My json file

>

 {    "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" }

回答1:


org.json.JSONObject cannot be converted to JSONArray

You root node is a JSONObject but you're parsing it using JSONArray.

Replace

JSONArray stationsJsonArray = new JSONArray(stationsJsonString);

with

JSONObject stationsJsonObject = new JSONObject(stationsJsonString);


来源:https://stackoverflow.com/questions/53397588/jsonexeption-when-parsing-local-json-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!