我想知道如何将Jsonarray中的字符串(如下面的代码中的字符串)转换为双精度列表。
String lineStringJsonArray = "[[[0.093493,51.6037],[0.092077,51.6134],[0.075051,51.6179],[-0.247248,51.5166],[-0.259754,51.5235],[-0.28098,51.518],[-0.301457,51.515]]]"
我应该如何使用模式删除那些方括号?
答案 0 :(得分:2)
使用json-simple
。
使用返回类似对象数组对象的JSONArray
对象进行迭代。我已经编译了一个打印数组中所有双打的例子,如果这是你想要的。
String lineStringJsonArray = "[[[0.093493,51.6037],[0.092077,51.6134],[0.075051,51.6179],[-0.247248,51.5166],[-0.259754,51.5235],[-0.28098,51.518],[-0.301457,51.515]]]";
JSONParser parser = new JSONParser();
try {
JSONArray arrays3 = (JSONArray) parser.parse(lineStringJsonArray);
JSONArray arrays2 = (JSONArray) arrays3.get(0);
for (Object items : arrays2) {
for (Object item : (JSONArray) items) {
System.out.println((Double) item);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
答案 1 :(得分:2)
如果你想解码这个JSON字符串,我会建议你使用Jackson库(http://wiki.fasterxml.com/JacksonHome)。您可以在Google上找到有关如何导入和使用它的帮助。
然后要使用的类应如下所示:
public class AwesomeClassName extends ArrayList<ArrayList<ArrayList<Double>>> {
}
请询问您是否需要任何帮助。
答案 2 :(得分:0)
促进重用,我更喜欢@ReutSharabani的答案。但是对于原始问题,要使用Pattern
,这是另一种解决方案:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Play {
static class Pair<T> {
T v1,v2;
Pair(T v1,T v2) { this.v1 = v1; this.v2 = v2; }
@Override public String toString() {
return "(X: "+v1+", Y: "+v2+")";
}
}
public static void main(String args[]) {
List<Pair<Double>> l = new ArrayList<>();
Pattern p = Pattern.compile("\\[([^\\[\\],]*),([^\\[\\],]*)]");
Matcher m = p.matcher("[[[0.093493,51.6037],[0.092077,51.6134],[0.075051,51.6179],[-0.247248,51.5166],[-0.259754,51.5235],[-0.28098,51.518],[-0.301457,51.515]]]");
while (m.find()) {
String v1 = m.group(1);
String v2 = m.group(2);
l.add(new Pair<>(Double.valueOf(v1),Double.valueOf(v2)));
}
l.stream().map(Pair::toString).forEach(System.out::println);
}
}