Javascript 如何从JSON字符串中检索多个属性值
我有一个JSON字符串:Javascript 如何从JSON字符串中检索多个属性值,javascript,json,regex,grouping,extract,Javascript,Json,Regex,Grouping,Extract,我有一个JSON字符串: x = '{"userId":"foo","traits":{"email":"foo@foobar.com"},"type":"identify"}' 我想从中获得某些值。我试过正则表达式: 到目前为止我有 anonId = x.match(/\"anonymous_id\"\:(.*?)/)?[1] email = x.match(/\"email\"\:\"(.*?)\"/)?[1] userId = x.match(/\"userId\"\:\"(.*?)\"
x = '{"userId":"foo","traits":{"email":"foo@foobar.com"},"type":"identify"}'
我想从中获得某些值。我试过正则表达式:
到目前为止我有
anonId = x.match(/\"anonymous_id\"\:(.*?)/)?[1]
email = x.match(/\"email\"\:\"(.*?)\"/)?[1]
userId = x.match(/\"userId\"\:\"(.*?)\"/)?[1]
type = x.match(/\"type\"\:\"(.*?)\"/)?[1]
这既丑陋又低效,但当我尝试将它们结合起来时:
[_, a, b, c, d] = x.match(/\"anonymous_id\"\:(.*?)|\"userId\"\:(.*?)|\"email\"\:(.*?)|\"type\"\:(.*?)/g)
返回的结果是整个组,而不仅仅是匹配的部分
我希望a,b,c,d等于键的值,但是我得到:
Wanted:
**>> ["foo","foo@foobar.com","identify"]**
Actual results:
>> ["userId":"foo","email":"foo@foobar.com","type":"identify"]
有没有办法在一行正则表达式中实现这一点
---乌德帕特----
我最后和你一起去了
rxp = /\"user_id\"\:\"(.*?)\"|\"anonymous_id\"\:\"(.*?)\"|\"type\"\:\"(.*?)\"/g
anonId = null
userId = null
type = null
while (arr = rxp.exec(bdy)) isnt null
userId = arr[1] if arr[1]
anonId = arr[2] if arr[2]
type = arr[3] if arr[3]
FWIW我避免使用JSON.parse,因为我正在处理数千个这样的文件,因为我只需要一小部分,我不希望JSON.parse的速度太慢对服务器造成不必要的影响
try {
var parsed = JSON.parse(x);
anonId = parsed.anonymous_id;
} catch (ex) {
//invalid json
}
除非输入了无效的JSON,否则这应该是可行的。然后您可能想考虑正则表达式,但即使这样,您也可能需要查看模板。 < P>尝试使用<代码> ReXEP < /COD> <代码> /[A-z@.]+(?=”,|“})/ig在单个调用
.match()
var x='{“userId”:“foo”,“traits”:{“email”:foo@foobar.com“}”,类型“:“标识”}”;
var res=x.match(/[a-z@.]+(?=”,|“})/ig);
控制台日志(res)
为什么不能使用JSON.parse()
并通过迭代查找值?您的问题标题Javascript match提取多个值字符串
,这与您实际要求的内容几乎没有关系。你能改进吗?@RokoC.Buljan我不知道如何准确地表达它,尽管你甚至不需要在执行JSON.parse
后进行迭代,但我愿意接受建议。您只需使用obj.prop
访问相关属性即可;你测试过了吗?事实上,JSON解析器通常相当快。无论如何,如果您对自己的问题有“答案”,请将其作为答案添加,而不是作为问题的一部分。@RokoC.Buljan请参阅更新的帖子。应匹配处对象属性的所有值OP@guest271314你的回答非常接近我需要的,谢谢!不幸的是,您的函数会根据所提供数据的顺序返回值,我无法真正知道哪个值是userId、email等,因为数据不是来自我可以控制的东西。您为什么建议使用regexp解析JSON是个谜。@torazaburo“你为什么建议用regexp解析JSON是个谜”这是问题的要求;请参阅“有没有办法在一行regex中实现这一点?”你会如何回答一个问题,即用哪种枪射中自己的头部?