Index: src/org/openstreetmap/josm/io/GeoJSONWriter.java
===================================================================
--- src/org/openstreetmap/josm/io/GeoJSONWriter.java	(revision 16846)
+++ src/org/openstreetmap/josm/io/GeoJSONWriter.java	(working copy)
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
+import java.io.StringReader;
 import java.io.StringWriter;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -21,6 +22,8 @@
 import javax.json.JsonValue;
 import javax.json.JsonWriter;
 import javax.json.stream.JsonGenerator;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParsingException;
 
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -182,7 +185,7 @@
         // Properties
         final JsonObjectBuilder propObj = Json.createObjectBuilder();
         for (Entry<String, String> t : p.getKeys().entrySet()) {
-            propObj.add(t.getKey(), t.getValue());
+            propObj.add(t.getKey(), convertValueToJson(t.getValue()));
         }
         final JsonObject prop = propObj.build();
 
@@ -200,6 +203,17 @@
         }
     }
 
+    private static JsonValue convertValueToJson(String value) {
+        JsonParser parser = Json.createParser(new StringReader(value));
+        try {
+        if (parser.hasNext() && parser.next() != null)
+            return parser.getValue();
+        } catch (JsonParsingException e) {
+            Logging.trace(e);
+        }
+        return Json.createValue(value);
+    }
+
     protected void appendLayerBounds(DataSet ds, JsonObjectBuilder object) {
         if (ds != null) {
             Iterator<Bounds> it = ds.getDataSourceBounds().iterator();
