日期:2014-05-20  浏览次数:20920 次

请教:正则表达式如何解析JSON
本人需要将JSON中的键值对,用正则分组,一组一组的拿出来.请高手指点:

这是我要解析的JSON
{"username":"zs","password":"123123","phone":"13612345678"}

网上查了查,解析第一对键值,有人用如下正则表达式:

.*"username":"([^"]+)".*

我有两个疑问:
1)()里面是分组么?它运行结果为什么只得到"zs",运行结果请参考附图
2)我如何获得第二对,第三对呢?我试过了.*"password":"([^"]+)".*  输出仍然是zs

运行结果如下:

正则表达式 JSON

------解决方案--------------------
注意,如果逗号在“”之间你的正则会有问题
------解决方案--------------------

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":"zs","password":"123123","phone":"13612345678"
正则表达式
.*"username":"([^"]+)","password":"([^"]+)".*,"phone":"([^"]+)".*
运行结果
Match 1 of 1: "username":"zs","password":"123123","phone":"13612345678"      0     57
Group 1: zs     12      2
Group 2: 123123     28      6
Group 3: 13612345678     45     11


这个表达式简直不堪一击,如果 "username" 的前后多个空格呢?如果“:”前后也有空格呢?
------解决方案--------------------
一定要用正则吗,用数组也挺好的
------解决方案--------------------
解析第二个password
.*"password":"(\\w+)",.*
获取的时候得到group(1)的值
转义符号没填,填上转义符号后应该可以用。。
当然,json串有专门的解析工具,干嘛非得用正则呢,当然如果只是当学习正则的话还是不错的