如何将带有方括号的字符串转换为Java中的大量双打?

时间:2015-07-31 22:56:25

标签: java json

我想知道如何将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]]]"

我应该如何使用模式删除那些方括号?

3 个答案:

答案 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);
  }
}