У меня есть файл json, который нужно разобрать, но стандартный json-парсер не работает, я не знаю почему. Может быть, я что-то делаю неправильно, может кто-нибудь мне помочь?JSON синтаксический анализатор не работает всегда
Это класс анализатора:
public class GeoJSONDeserializer {
public static Route routeFromGeoJsonDictionary(JSONObject json)
{
Route route = new Route();
try {
JSONArray features = json.getJSONArray("features");
for (int i = 0; i < features.length(); i++) {
JSONObject geometry = features.getJSONObject(i).getJSONObject("geometry");
if (geometry.getString("type").equals("LineString"))
{
route.paths.add(routePathFromLineStringFeature(features.getJSONObject(i)));
} else if (geometry.getString("type").equals("Point"))
{
route.pois.add(poiFromPointFeature(features.getJSONObject(i)));
} else if (geometry.getString("type").equals("Polygon"))
{
route.paths.add(routeAnnotationFromPolygonFeature(features.getJSONObject(i)));
}
}
} catch (Exception e)
{}
return route;
}
public static Path routePathFromLineStringFeature(JSONObject json)
{
Path path = new Path();
try {
JSONObject geometry = json.getJSONObject("geometry");
JSONArray lineStringCoordinates = geometry.getJSONArray("coordinates");
for (int i = 0; i < lineStringCoordinates.length(); i++) {
String coordinatePair = lineStringCoordinates.getString(i);
String[] coords =
coordinatePair.substring(1, coordinatePair.length() - 2).split(",");
double lat = Double.parseDouble(coords[0]);
double lon = Double.parseDouble(coords[1]);
LatLng point = new LatLng(lon, lat);
path.coordinates.add(point);
}
} catch (Exception e)
{}
return path;
}
public static Path routeAnnotationFromPolygonFeature(JSONObject json)
{
Path path = new Path();
try {
JSONObject geometry = json.getJSONObject("geometry");
JSONArray lineStringCoordinates = json.getJSONArray("coordinates");
for (int i = 0; i < lineStringCoordinates.length(); i++) {
String coordinatePair;
if (i >= lineStringCoordinates.length())
{
coordinatePair = lineStringCoordinates.getString(0);
} else {
coordinatePair = lineStringCoordinates.getString(i);
}
String[] coords =
coordinatePair.substring(1, coordinatePair.length() - 2).split(",");
double lat = Double.parseDouble(coords[0]);
double lon = Double.parseDouble(coords[1]);
LatLng point = new LatLng(lon, lat);
path.coordinates.add(point);
}
} catch (Exception e)
{}
return path;
}
public static POI poiFromPointFeature(JSONObject json)
{
POI poi = new POI();
try {
JSONObject geometry = json.getJSONObject("geometry");
Log.e("no parsed", geometry.toString());
JSONObject properties = json.getJSONObject("properties");
poi.title = properties.getString("name");
poi.name = properties.getString("title");
poi.subtitle = properties.getString("desc");
try{
JSONArray coordinates = geometry.getJSONArray("coordinates");
poi.coordinates = new LatLng(coordinates.getDouble(1), coordinates.getDouble(0));
Log.e("parsed", coordinates.toString());
}catch (Exception e){
Log.e("error", e.getMessage());
}
} catch (Exception e)
{}
return poi;
}}
Тогда вот мой выход журнала:
Вы можете увидеть некоторые из неразбираемых строк обрабатываются, а некоторые нет. Это не случайная проблема, так как это всегда происходит с одними и теми же.
Вот ссылка на файл JSon:
Я надеюсь, что кто-то может помочь мне с этой проблемой.
В вашем 'poiFromPointFeature (JSONObject JSon)' в вашем пустом выходе поймать то, что ошибка. ваша ошибка происходит до того, как вы попытаетесь разобрать координаты. –
@JohnBoker, но эта строка JSONObject geometry = json.getJSONObject ("geometry"); работает, вы можете просмотреть журнал и вести журнал каждой строки, но когда я пытаюсь получить координаты, он не работает. правильно? – toonvanstrijp
что-то между «no parsed» и «parsed» есть исключение. у вас есть часть этого в try catch, который показывает ошибку, поэтому я думаю, что часть, которая находится в try..catch без отображения ошибки, будет содержать ошибку –