regex - 正则表达式提取 Json 属性名称
问题描述
我正在寻找提取 Json 字符串的所有属性名称。我提出了一个表达式,但它不适用于某些特定场景,我构建的表达式如下
"([a-zA-Z0-9-]*)"(?::\s(?:"[a-zA-Z0-9-\s:]*")|(?:\s^null$)|(?:\s[0-9]+,))
它适用于以下属性:
{"dataAreaId": "cel", "CustomerAccount": "C101112", "AddressBrazilianCNPJOrCPF": "", "PartyType": "Organization"}
但它不检索/匹配这些属性:
{ "DeliveryAddressLongitude": 0,"AddressTimeZone": null,"FullPrimaryAddress": "7800 Avenue Aurtweuil Suite 28841\nBrossard QC J2Z 3P1\nCanada"}
在我苦苦挣扎时,我将非常感谢有任何关于它的指导方针。
干杯
文森特
解决方案
使用生成的 json,您只需要匹配冒号前面的单词,对吧,同时考虑引号?例如:
/("?)(\b\w+\b)\1:/gm
编辑:
/.../gm
:g
andm
是修改表达式行为的标志,其中 g(全局)表示尝试在字符串中查找所有匹配项,m(多行)表示使字符串中的每一行都可以通过^
and$
锚定;你实际上不需要m
这里的标志,这是我的疏忽。根据正则表达式的风格,您将使用如上所示的标志 - 在第二个表达式分隔符之后,作为匹配函数的参数或作为表达式修饰符,如(?g)
. 我只是找到/.../flags
了一个很好的快捷方式来显示带有标志的表达式。\b
是一个单词边界,它通过确保单词字符的两侧不能有单词字符来锚定单词字符序列;如果存在,则表达式将不匹配。在这个表达式中,我只是使用它来使引擎更快地失败坏字符串,同时考虑可选的"
. 当您仅在格式良好的 JSON 上使用此表达式时,它们并不是严格需要的。
推荐阅读
- powershell - 无法在 Powershell 中将 Get-AzADUser 作为托管标识执行
- java - 相同的应用程序在两台机器中表现不同
- dns - 将 Vanity Nameservers 迁移到 AWS Route53?
- python - 当用曼哈顿距离启发式解决一个 8 谜题时,即使谜题没有解决,也没有位置可以移动
- email - Android 11 - 意图操作 SEND - 仅限电子邮件客户端
- sql - 如何与 CASE WHEN 语句生成的列执行乘法?
- specflow - 我们可以在运行时创建 specflow Table 实例并在其中添加值吗?
- node.js - 无法在 Controller 中获取 Repository 抛出的错误
- powerbi - Power BI 中的 DAX 函数
- amazon-web-services - 毕竟,如何使用 Lambda、API Gateway 和 RDS 为网络聊天创建 websocket?