【发布时间】:2021-01-22 19:42:03
【问题描述】:
我需要匹配复杂 JSON 中的所有键值对,但只匹配文本/字符串的值。
例如来自:
{"results":[
{"id":16,"name":"some name1","location":"some location1","parent":true, ,"region":"some region"},
{"id":157,"name":"some name2" , "location":some location2","parent":true}
],"totalCount":170}
我需要匹配:
"name"
"some name1"
"location"
"some location1"
"region"
"some region1"
etc
我有这个 [^:]+\"(?=[,}\s]|$) ,但它只匹配值(这是正确的)。
我还需要匹配键:“name”、“location”、“region”(并且可以有其他键名)
这里是匹配值的示例https://regex101.com/r/m8FePZ/6
【问题讨论】:
-
你有使用RegEx吗?在 99.9% 的情况下,您不应该使用 RegEx 以标准化的机器可读格式解析某些内容,例如 JSON(或 HTML、XML 等)。您应该使用您的编程语言的本机 JSON 解析器。您在哪种语言/环境中工作?
-
只是出于好奇:为什么不只解析和遍历键?微优化?还是处理极其庞大的数据集?
-
不要尝试使用正则表达式解析 JSON。你以后会后悔的。有很多你没有想到的边缘情况和可能出错的事情。在您使用的任何语言中使用适当的 JSON 解析器。
-
如果你是从 shell 做一些事情,那么看看像
jq这样的工具。这是我写的an article,其中包含一个关于如何使用jq的简短示例。 -
感谢 cmets。我使用 JAVA,但我可以用任何语言来做。如果正则表达式出现问题(仅用于测试目的),则数据并不重要。我想做一个小脚本来解析任何多级 json 对象并通过添加键和随机数来混淆值。不知道 JSON 将包含什么。我查看了不同的库,但没有一个能帮助我实现这一点并使用 Jackson 解析它,例如,将其转换为 Map 意味着在 JSON 内的所有级别中下降,这可能有点复杂。