JSONArray向geoJSON添加不需要的引号

时间:2016-11-15 05:19:08

标签: java json string geojson

我试图让我的Java程序将其输出写入geoJSON文件。像下面这样的东西很好用

JSONArray coord = new JSONArray("["+obj.getLng()+","+obj.getLat()+"]");
point.put("coordinates", coord);

生成以下正确的JSON字符串

"coordinates":[-105.93879779882633,36.29086585830942]

但是,我还想在输出中包含线条(和多边形)。这些被定义为坐标集合,因此生成的字符串看起来像这样

"coordinates":[[-106.0,36.0],[-105.96856743366506,36.0],[-105.93713486733012,36.0]]

我正在尝试阅读将我的行定义为JSONArray的点集合。但是,无论我做什么,我的最终JSON字符串中都会出现额外的引号。像

这样的东西
"coordinates":["[-106.0,36.0],[-105.96856743366506,36.0],[-105.93713486733012,36.0]"]

如果我尝试使用StringBuilder来构建我希望坐标值保持的字符串的确切内容。如果我尝试创建一个坐标数组数组并将其提供给JSONArray构造函数,我只需将每个坐标对用引号代替。

我的问题是:为什么使用StringBuilder或其他方法创建我的JSONArray会导致这个结果,但是直接将String传递给新的JSONArray构造函数呢? JSONArray构造函数似乎完全能够解释

new JSONArray("["+obj.getLng()+","+obj.getLat()+"]");

正确,但当我说

时就崩溃了
StringBuilder builder = new StringBuilder();
for (Obj obj : objs) {
builder.append("["+obj.getLng()+","+obj.getLat()+"]");
} 
new JSONArray(builder.toString());

这似乎是一个微不足道的问题,所以我的问题的解决方案可能很简单,但我特别希望帮助理解为什么会这样。

示例

JSONObject point = new JSONObject();
JSONArray coord = new JSONArray("["+150+","+30+"]");
point.put("coordinates", coord);
System.out.println(point.toString());

结果

{"coordinates":[150,30]}

然而

JSONObject lineString = new JSONObject();
String[] coords = {"["+150+","+30+"],["+160+","+40+"],["+170+","+50+"]"};
JSONArray coord = new JSONArray(coords);
lineString.put("coordinates", coord);
System.out.println(lineString.toString());

结果

{"coordinates":["[150,30],[160,40],[170,50]"]}

问题是围绕绳索字符串数组的引号({"坐标":[ - >" [150,30],[160, 40],[170,50]的"< - ]})

2 个答案:

答案 0 :(得分:1)

coords只需要作为字符串成为JSONArray

没有额外的报价。你已经列出了一个字符串。

所以喜欢

String coords = "["+150+","+30+"]";
JSONArray coordArray = new JSONArray(coords);

这似乎与你的第一个例子相符,这是正确的,所以我不会看到混乱,因为你做了不同的事情。

无论如何,最好使用JSONArray方法来构建数组,而不是乱用字符串连接。

答案 1 :(得分:0)

在您的示例中,A JSONArray包含许多其他JSONArray。 所以我们必须相应地编写代码。

E.g:

JSONArray cooord = new JSONArray();     
for (Obj obj : objs) {
    JSONArray temp = new JSONArray();
    temp.put(obj.getLng());
    temp.put(obj.getLat()+);

    cooord.put(temp);
}

System.out.println(cooord);