【发布时间】:2016-11-15 05:19:07
【问题描述】:
我正在尝试让我的 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]"]}
问题是围绕 cords 字符串数组的引号 ({"coordinates":[-->"[150,30],[160,40],[170,50]"]})
【问题讨论】:
-
你在哪里附加逗号?外括号在哪里?请附上MCVE,以便我们找出问题所在。
-
您的示例与您的问题非常不同,但它确实使您得到结果的原因非常明显。