2015-08-12 2 views
0

У меня есть файл 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; 
}} 

Тогда вот мой выход журнала:

link to the log file image

Вы можете увидеть некоторые из неразбираемых строк обрабатываются, а некоторые нет. Это не случайная проблема, так как это всегда происходит с одними и теми же.

Вот ссылка на файл JSon:

Json file download

Я надеюсь, что кто-то может помочь мне с этой проблемой.

+0

В вашем 'poiFromPointFeature (JSONObject JSon)' в вашем пустом выходе поймать то, что ошибка. ваша ошибка происходит до того, как вы попытаетесь разобрать координаты. –

+0

@JohnBoker, но эта строка JSONObject geometry = json.getJSONObject ("geometry"); работает, вы можете просмотреть журнал и вести журнал каждой строки, но когда я пытаюсь получить координаты, он не работает. правильно? – toonvanstrijp

+0

что-то между «no parsed» и «parsed» есть исключение. у вас есть часть этого в try catch, который показывает ошибку, поэтому я думаю, что часть, которая находится в try..catch без отображения ошибки, будет содержать ошибку –

ответ

1

я должен использовать optString вместо getString поэтому анализатор не будет врезаться в пробном

Смежные вопросы