如何使用嵌套方括号来标记Java String?

时间:2014-12-16 04:53:53

标签: java regex json

我有一个字符串,我想放入一个字符串的ArrayList。该字符串基本上是一个JSONObject,所以我可能只是使用了错误的方法。

字符串的显示方式是:

String all = "{"users":
[
 [{"login":"username1"},{"password":"test1"},{"index":"1"}],
 [{"login":"username2"},{"password":"test2"},{"index":"2"}]
]}";

我想要的只是JSONObject值,所以我的模式给了我这个字符串:

String part = "[
                [{"login":"username1"},{"password":"test1"},{"index":"1"}],
                [{"login":"username2"},{"password":"test2"},{"index":"2"}]
               ]";

这就是我想要的:

user[0] = "[{"login":"username1"},{"password":"test1"},{"index":"1"}]";
user[1] = "[{"login":"username2"},{"password":"test2"},{"index":"2"}]";

当我尝试将内部[]之间的所有内容分组时,它只返回外部[]中的所有内容。

我试过了:

String[] user = new String[20];
Pattern p = Pattern.compile("(\\[\\{.*\\}\\])");
Matcher m = p.matcher(part);
while(m.find()){
    user = m.group().split("\\],\\[");
}

这种方法摆脱了[,我用作分隔符。

2 个答案:

答案 0 :(得分:0)

Class User {
  private String username;
  private String password;
}

Class Users{
  LinkedList<User> users;
}

您可以使用任何可用的JSON marshallers(如Jackson等)将字符串反序列化为Users

答案 1 :(得分:0)

所以我接受了评论部分的建议,确定使用JSON方法是可行的。我仍然想看看是否可以用正则表达式来完成。

ArrayList<String> myList = new ArrayList<String>();
JSONObject obj = new JSONObject();
JSONArray arr = new JSONArray();

obj = {"user":"[[{},{},{}],[{},{},{}]]";

// This gives me the outer JSONArray    
arr = obj.getJSONArray("user");

// This iterates through the outer JSONArray assigning each inner JSONArray
// to my ArrayList as strings.
for( int i = 0; i < arr.length(); i++){
    myList.put(arr.getJSONArray(i).toString());
}