2016-11-15 12 views
-1

Я пытаюсь, чтобы моя программа Java записывала свой вывод в файл geoJSON. Что-то вроде следующих работ хорошоJSONArray добавляет нежелательные кавычки в 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

Где вы добавив запятые? Где внешние скобки? Пожалуйста, укажите [MCVE] (http://stackoverflow.com/help/mcve), чтобы мы могли идентифицировать проблему. – shmosel

+0

Ваш пример сильно отличается от вашего вопроса, но он делает довольно очевидным, почему вы получаете свои результаты. – shmosel

ответ

1

coords должен быть просто JSONArray как строка.

Нет дополнительных кавычек. Вы создали список из одной строки.

Так как

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

который, кажется, соответствует вашему первому примеру, и это правильно, так что я не вижу путаницы, так как вы делаете разные вещи.

В любом случае было бы лучше использовать методы JSONArray для построения массива, а не возиться со конкатенацией строк.

0

В вашем примере 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);