【问题标题】:JSONArray adding unwanted quotation marks to geoJSONJSONArray 将不需要的引号添加到 geoJSON
【发布时间】: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,以便我们找出问题所在。
  • 您的示例与您的问题非常不同,但它确实使您得到结果的原因非常明显。

标签: java json string geojson


【解决方案1】:

coords 需要只是一个 JSONArray作为字符串

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

很喜欢

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

这似乎与您的第一个示例相匹配,这是正确的,所以我没有看到混淆,因为您正在做不同的事情。

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

【讨论】:

    【解决方案2】:

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

    例如:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 2019-01-30
      • 2014-04-24
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      相关资源
      最近更新 更多