我在Java中创建了一个用于创建对象的类,我的一个静态方法将一些JSON转换为对象(我有一个JavaScript版本,因此可以轻松转换)。
JSON的示例位是:
{"header": ["H1","H2","H3"], "cells": [["R1C1","R1C2","R1C3"],["Row 2, Column 1","Row 2, C2","R2 - C2"]]}
在我的方法中,我没有使用任何JSON包,因为据我所知,它需要我下载一个,所以我一直在使用RegEx来提取数据。
方法:
public static Table jsonToTable(String json) {
Pattern h = Pattern.compile("\"header\": \[((?:\" *[^\"]+ *\",?)+)]");
Pattern r = Pattern.compile("\"cells\": \[((\[(?:(?:\" *[^\"]+ *\",?)+)],?)+)]");
Matcher hm = h.matcher(json);
Matcher rm = r.matcher(json);
ArrayList<String> header = new ArrayList(Arrays.asList(hm.group(0).split(",")));
String[] _rows = rm.group(0).split(",");
ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>();
for (String row : _rows) {
row = row.replace("[","");
row = row.replace("]","");
rows.add(new ArrayList(Arrays.asList(row.split(","))));
}
Table t = new Table(header);
for (ArrayList<String> row : rows) {
t.addRow(row);
}
return t;
}
使用此方法,每当我使用它时都会收到运行时错误。我完全没有描述,所以我不能100%确定导致错误的原因。我只是假设小组。
然而,对于模式,我如何在上面编写它们,虽然ideone.com编译器不喜欢这样但开放的[
括号已被转义,所以可能是问题所在。
是否有人能够告诉我导致运行时错误的原因?我已经尝试了我能想到的一切。
答案 0 :(得分:0)
如果您没有匹配,则无法使用group()
对象的Matcher
方法。您应该在以下块中使用此方法:
while(matcher.find()){ //this if you want to match globally
String matched = matcher.group();
}
或
if(matcher.find()){ //this if you want just the first match
String matched = matcher.group();
}