使用正则表达式解析一个非常简单的JSON文件

时间:2013-12-12 13:18:40

标签: java regex json

我不确定是否可以完成,但我想将一个非常简单的JSON文件解析为一个字符串数组。

示例文件:

["String1", "String2", "oneMoreString"]

到目前为止,我认为我会使用带有模式的Scanner来获取输出,但未能这样做。

    ArrayList<String> strings = new ArrayList<String>();
    File f = new File("src/sample.txt");
    String pattern = "\\s*[\"\"]\\s*";
    try {
        InputStream is = new FileInputStream(f);
        Scanner s = new Scanner(is);
        s.useDelimiter(pattern);
        while (s.hasNext()){
            strings.add(s.next());
        }
        s.close();
        is.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

因为模式显然是错误的,因为它认为“,”因为它适合,但我希望它不会被包括......:S

我也接受可以解析的任何其他方式的建议。也许是JSON解析器?但由于文件很简单,我认为没必要。

4 个答案:

答案 0 :(得分:3)

最好使用像Jackson Mapper这样的JSON解析器来解析JSON字符串。

但是如果你有一个简单的String,你可以快速使用一个样本正则表达式。

试试这个:

    String str = "[\"String1\", \"String2\", \"oneMoreString\"]";

    Pattern pattern = Pattern.compile("\"(.+?)\"");
    Matcher matcher = pattern.matcher(str);

    List<String> list = new ArrayList<String>();
    while (matcher.find()) {
        // System.out.println(matcher.group(1));.
        list.add(matcher.group(1));
    }

答案 1 :(得分:3)

看到你的杰克逊在你的课程中,只需:

ObjectMapper mapper = new ObjectMapper();
String[] array = mapper.readValue("[\"String1\", \"String2\", \"oneMoreString\"]", String[].class);
System.out.println(Arrays.toString(array));

将打印:

[String1, String2, oneMoreString]

答案 2 :(得分:1)

//split by ,
String strings[] = s.split(",");
//remove [ from first string
strings[0] = strings[0].substring(1);
//remove ] from last string
String last = strings[strings.length - 1];
strings[strings.length - 1] = last.substring(0, last.length() - 1);

答案 3 :(得分:-1)

不是像上面那样解析它,而是可以使用任何可用的Java json解析器