我试图让我的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]的"< - ]})
答案 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);