请教:正则表达式如何解析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串有专门的解析工具,干嘛非得用正则呢,当然如果只是当学习正则的话还是不错的