如何用正则表达式检测JSON对象是否含任意顺序的两个指定KV对
检测JSON对象中是否同时存在任意顺序的两个指定键值对
方法一:改进正则表达式
要匹配两个键值对的任意顺序,只需把两种顺序的情况用逻辑或(|)整合到正则中,同时可以考虑JSON中可能存在的空白字符,让正则更鲁棒:
^.*(("animal"\s*:\s*"dog".*"fish"\s*:\s*"tuna")|("fish"\s*:\s*"tuna".*"animal"\s*:\s*"dog")).*$
\s*用来匹配键和值之间可能存在的任意空白(空格、制表符等)- 括号内的两个分支分别对应两种键值对顺序
- 注意:这种方法仅适用于格式非常规整的JSON字符串,如果JSON中包含转义字符、多行字符串或其他复杂格式,正则很容易失效。
方法二:解析JSON后直接判断(推荐)
正则处理JSON本质上是一种临时方案,因为JSON的语法规则复杂,正则无法覆盖所有合法场景。更可靠的方式是先将JSON字符串解析成对象,再直接判断两个键值是否同时存在且符合预期:
JavaScript示例:
const jsonString = '{"color":"red","animal":"dog","drink":"water","food":"pizza","fish":"tuna","foo":"bar"}'; const data = JSON.parse(jsonString); const hasRequiredPairs = data.animal === "dog" && data.fish === "tuna"; console.log(hasRequiredPairs); // 输出 true
Python示例:
import json json_string = '{"color":"red","animal":"dog","drink":"water","food":"pizza","fish":"tuna","foo":"bar"}' data = json.loads(json_string) has_required_pairs = data.get("animal") == "dog" and data.get("fish") == "tuna" print(has_required_pairs) # 输出 True
这种方法能正确处理所有合法的JSON格式,包括转义字符、任意空白、嵌套结构等,是生产环境中的首选方案。
内容的提问来源于stack exchange,提问作者jsammut
相关产品推荐
相关产品推荐

