2016-04-29 23 views
2

Ich möchte eine App schreiben, die GeoJson mit Gson als einzige Abhängigkeit laden wird. Mit Gson ist ziemlich Fußgänger, aber wenn es um die anonymen Arrays für die Koordinaten geht, bin ich ratlos. Das 'Koordinaten' Array ist ein Array von Arrays. AAARRRGGG!Wie kann ich GeoJson mit Gson analysieren?

"geometry":{ 
     "type":"Polygon", 
     "coordinates":[ 
     [ 
      [ 
       -69.899139, 
       12.452005 
      ], 
      [ 
       -69.895676, 
       12.423015 
      ], 

Ich kann alle anderen Daten laden, aber die 'Koordinaten' Arrays haben keine Namen, also wie lade ich sie?

ich mehrere Iterationen dieser versucht haben, aber keine Freude ...

public static final class Coordinate { 
     public final double[] coord; 

     public Coordinate(double[] coord) { 
      this.coord = coord; 
     } 
    } 

Jede Hilfe? Ich weiß, dass es bereits Pakete gibt, die geojson analysieren, aber ich würde gerne das JSON-Laden verstehen. Und wie heißen unbenannte Arrays? Anonyme Arrays googelt nicht gut!

+0

Kannst du nicht einfach machen 'coord' eine' double [] [] [] '? – azurefrog

+0

Scheint nicht zu funktionieren. Erhalte denselben Fehler ... – markthegrea

Antwort

1

Sie können Gson zum Analysieren von dreifach verschachtelten namenlosen Arrays veranlassen, indem Sie das Koordinatenfeld als double[][][] deklarieren.

Hier ist ein lauffähiges Beispielprogramm, das zeigt, wie es geht:

import org.apache.commons.lang3.ArrayUtils; 
import com.google.gson.Gson; 

public class Scratch { 
    public static void main(String[] args) throws Exception { 
     String json = "{" + 
       " \"geometry\": {" + 
       "  \"type\": \"Polygon\"," + 
       "  \"coordinates\": [" + 
       "   [" + 
       "    [-69.899139," + 
       "     12.452005" + 
       "    ]," + 
       "    [-69.895676," + 
       "     12.423015" + 
       "    ]" + 
       "   ]" + 
       "  ]" + 
       " }" + 
       "}"; 

     Geometry g = new Gson().fromJson(json, Geometry.class); 
     System.out.println(g); 
     // Geometry [geometry=GeometryData [type=Polygon, coordinates={{{-69.899139,12.452005},{-69.895676,12.423015}}}]] 
    } 
} 
class Geometry { 
    GeometryData geometry; 

    @Override 
    public String toString() { 
     return "Geometry [geometry=" + geometry + "]"; 
    } 
} 
class GeometryData { 
    String type; 
    double[][][] coordinates; 

    @Override 
    public String toString() { 
     return "GeometryData [type=" + type + ", coordinates=" + ArrayUtils.toString(coordinates) + "]"; 
    } 
} 
Verwandte Themen