【问题标题】:How to tokenize Java String with nested square brackets?如何使用嵌套方括号标记 Java 字符串?
【发布时间】:2014-12-16 04:53:52
【问题描述】:

我想将一个字符串放入字符串的 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("\\],\\[");
}

这种方法去掉了我用作分隔符的 ],[。

【问题讨论】:

标签: java regex json


【解决方案1】:
Class User {
  private String username;
  private String password;
}

Class Users{
  LinkedList<User> users;
}

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

【讨论】:

    【解决方案2】:

    所以我接受了评论部分的建议,果然使用 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());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      相关资源
      最近更新 更多