请教:正则表达式如何解析JSON

TheQueenOfJava 2013-05-28 11:33:40
本人需要将JSON中的键值对,用正则分组,一组一组的拿出来.请高手指点:

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

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

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

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

运行结果如下:

...全文
3921 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
FoxBryant 2016-01-27
  • 打赏
  • 举报
回复
这个是不是可以:
("\w*"):("\w*")

jongsuny 2013-09-03
  • 打赏
  • 举报
回复
建议用json包, 这样还能验证。
蓝天630902 2013-06-09
  • 打赏
  • 举报
回复
Private Sub CommandButton1_Click() 'json On Error Resume Next tt = "brr = {""username"":""zs"",""password"":""123123"",""phone"":""13612345678""}" With CreateObject("MSScriptControl.ScriptControl") .Language = "JScript" .AddCode tt Debug.Print .Eval("brr.username"), .Eval("brr.password"), .Eval("brr.phone") End With End Sub
TheQueenOfJava 2013-06-04
  • 打赏
  • 举报
回复
使用APACHE JEMETER测试工具,传post-processor参数时,只支持正则表达式,而且必须用分组。。。
白开水MD5 2013-06-03
  • 打赏
  • 举报
回复
为什么要用正则呢?
Candylibin 2013-06-03
  • 打赏
  • 举报
回复
用专门的解析工具吧比正则灵活 且强大
失落夏天 2013-06-03
  • 打赏
  • 举报
回复
解析第二个password .*"password":"(\\w+)",.* 获取的时候得到group(1)的值 转义符号没填,填上转义符号后应该可以用。。 当然,json串有专门的解析工具,干嘛非得用正则呢,当然如果只是当学习正则的话还是不错的
oh_Maxy 2013-06-03
  • 打赏
  • 举报
回复
让人头疼的正则。。
A18767101172 2013-06-02
  • 打赏
  • 举报
回复
一定要用正则吗,用数组也挺好的
  • 打赏
  • 举报
回复
引用 3 楼 u010219358 的回复:
字符串 照猫画虎,我蒙出一种方案来,但不是很理解,至少它可行. 放上来供初学者参考,高人点评: 字符串 "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" 的前后多个空格呢?如果“:”前后也有空格呢?
  • 打赏
  • 举报
回复
JSON 是具有语义结构的数据,含有不定层次的嵌套结构,正则表达式无法处理带有未定层次嵌套结构的数据(.Net 中的正则表达式平衡组语法可以支持)。 建议使用 JSON 解析工具,比如:fastjson、jackson、Gson 等等都是很好用的工具。 毕竟正则表达式是模式匹配工具,而不是语法解析工具。
Inhibitory 2013-05-28
  • 打赏
  • 举报
回复
注意,如果逗号在“”之间你的正则会有问题
TheQueenOfJava 2013-05-28
  • 打赏
  • 举报
回复
这是APACHE JEMETER测试,要求的后处理器解析参数。。。有志于研究JMETER同志,我们可以继续讨论

TheQueenOfJava 2013-05-28
  • 打赏
  • 举报
回复
字符串 照猫画虎,我蒙出一种方案来,但不是很理解,至少它可行. 放上来供初学者参考,高人点评: 字符串 "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
若鱼1919 2013-05-28
  • 打赏
  • 举报
回复

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));
		}
	}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧