正则表达式如何解析JSON
本人需要将JSON中的键值对,用正则分组,一组一组的拿出来.请高手指点:
这是我要解析的JSON {"username":"zs","password":"123123","phone":"13612345678"}
网上查了查,解析第一对键值,有人用如下正则表达式:
.*"username":"([^"]+)".*
我有两个疑问: 1)()里面是分组么?它运行结果为什么只得到"zs",运行结果请参考附图 2)我如何获得第二对,第三对呢?我试过了.*"password":"([^"]+)".* 输出仍然是zs
注意,如果逗号在“”之间你的正则会有问题
public static void main(String[] args) throws Exception { String str = "{\"username\":\"zs\",\"password\":\"123123\",\"phone\":\"13612345678\"}"; Matcher m =Pattern.compile("\"(.*?)\":\"(.*?)\"").matcher(str); while(m.find()){ System.out.println(m.group(1)+"="+m.group(2)); } }
JSON 是具有语义结构的数据,含有不定层次的嵌套结构,正则表达式无法处理带有未定层次嵌套结构的数据(.Net 中的正则表达式平衡组语法可以支持)。
建议使用 JSON 解析工具,比如:fastjson、jackson、Gson 等等都是很好用的工具。
毕竟正则表达式是模式匹配工具,而不是语法解析工具。 这个表达式简直不堪一击,如果 "username" 的前后多个空格呢?如果“:”前后也有空格呢? 解析第二个password .*"password":"(\\w+)",.* 获取的时候得到group(1)的值 转义符号没填,填上转义符号后应该可以用。。 当然,json串有专门的解析工具,干嘛非得用正则呢,当然如果只是当学习正则的话还是不错的
|