Changeset 6484 in josm


Ignore:
Timestamp:
2013-12-17T15:56:05+01:00 (11 years ago)
Author:
Don-vip
Message:

see #7307, fix #8474 - use org.json as lightweight internal json library (already being used by several plugins)

Location:
trunk/src/org
Files:
8 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/io/GeoJSONWriter.java

    r6246 r6484  
    44import java.util.Map;
    55import java.util.Map.Entry;
     6
     7import org.json.JSONStringer;
    68import org.openstreetmap.josm.data.coor.LatLon;
    79import org.openstreetmap.josm.data.osm.Changeset;
     
    1618
    1719    private OsmDataLayer layer;
    18     private StringBuilder out;
     20    private JSONStringer out;
    1921    private static final boolean skipEmptyNodes = true;
    20     private boolean insertComma = false;
    2122
    2223    public GeoJSONWriter(OsmDataLayer layer) {
     
    2526
    2627    public String write() {
    27         out = new StringBuilder(1 << 12);
    28         out.append("{\"type\": \"FeatureCollection\",\n");
    29         out.append("\"features\": [\n");
     28        out = new JSONStringer();
     29        out.object().key("type").value("FeatureCollection");
     30        out.key("features").array();
    3031        for (Node n : layer.data.getNodes()) {
    3132            appendPrimitive(n);
     
    3435            appendPrimitive(w);
    3536        }
    36         out.append("\n]\n}");
     37        out.endArray().endObject();
    3738        return out.toString();
    3839    }
     
    4041    @Override
    4142    public void visit(Node n) {
    42         out.append("\"type\": \"Point\", \"coordinates\": ");
     43        out.key("type").value("Point").key("coordinates");
    4344        appendCoord(n.getCoor());
    4445    }
     
    4647    @Override
    4748    public void visit(Way w) {
    48         out.append("\"type\": \"LineString\", \"coordinates\": [");
    49         boolean insertCommaCoords = false;
     49        out.key("type").value("LineString").key("coordinates").array();
    5050        for (Node n : w.getNodes()) {
    51             if (insertCommaCoords) {
    52                 out.append(", ");
    53             }
    54             insertCommaCoords = true;
    5551            appendCoord(n.getCoor());
    5652        }
    57         out.append("]");
     53        out.endArray();
    5854    }
    5955
     
    7672            return;
    7773        }
    78         if (insertComma) {
    79             out.append(",\n");
     74        out.object().key("type").value("Feature");
     75        Map<String, String> tags = p.getKeys();
     76        out.key("properties").object();
     77        for (Entry<String, String> t : tags.entrySet()) {
     78            out.key(t.getKey()).value(t.getValue());
    8079        }
    81         insertComma = true;
    82         out.append("{\"type\": \"Feature\",\n");
    83         Map<String, String> tags = p.getKeys();
    84         if (!tags.isEmpty()) {
    85             out.append("\t\"properties\": {\n");
    86             boolean insertCommaTags = false;
    87             for (Entry<String, String> t : tags.entrySet()) {
    88                 if (insertCommaTags) {
    89                     out.append(",\n");
    90                 }
    91                 insertCommaTags = true;
    92                 out.append("\t\t\"").append(escape(t.getKey())).append("\": ");
    93                 out.append("\"").append(escape(t.getValue())).append("\"");
    94             }
    95             out.append("\n\t},\n");
    96         } else {
    97             out.append("\t\"properties\": {},\n");
    98         }
    99         { // append primitive specific
    100             out.append("\t\"geometry\": {");
    101             p.accept(this);
    102             out.append("}");
    103         }
    104         out.append("}");
     80        out.endObject();
     81        // append primitive specific
     82        out.key("geometry").object();
     83        p.accept(this);
     84        out.endObject();
     85        out.endObject();
    10586    }
    10687
    10788    protected void appendCoord(LatLon c) {
    10889        if (c != null) {
    109             out.append("[").append(c.lon()).append(", ").append(c.lat()).append("]");
     90            out.array().value(c.lon()).value(c.lat()).endArray();
    11091        }
    11192    }
Note: See TracChangeset for help on using the changeset viewer.