解析本地 Json 文件时的 JsonExeption
Posted
技术标签:
【中文标题】解析本地 Json 文件时的 JsonExeption【英文标题】:JsonExeption when parsing local Json file 【发布时间】: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","reference":"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","reference":"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","reference":"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","reference":"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","reference":"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"
【问题讨论】:
【参考方案1】:org.json.JSONObject 无法转换为 JSONArray
您的根节点是 JSONObject
,但您正在使用 JSONArray
解析它。
替换
JSONArray stationsJsonArray = new JSONArray(stationsJsonString);
与
JSONObject stationsJsonObject = new JSONObject(stationsJsonString);
【讨论】:
以上是关于解析本地 Json 文件时的 JsonExeption的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery 和 Javascript 解析本地 JSON 文件