Linux环境下用jq处理大JSON文件的关联字段查询需求
用jq精准查询超大JSON文件的正确方法
直接用jq的内置过滤能力,不要用grep(会破坏JSON结构且效率低下),根据你的JSON结构选择对应命令:
情况1:JSON是数组结构(多条数据包裹在[]中)
如果你的文件是类似[{"ID": "1", "Name": "Alice", "Address": "123 first street", "Email": "alice@xxx.com"}, ...]的数组格式,用以下命令匹配Address字段值:
jq '.[] | select(.Address == "123 first street")' Myfile.json
扩展匹配场景
- 部分匹配(Address包含目标字符串):
jq '.[] | select(.Address | contains("123 first street"))' Myfile.json
- 忽略大小写匹配:
jq '.[] | select(.Address | test("123 first street"; "i"))' Myfile.json
情况2:JSON是单个对象结构(仅一条数据)
如果文件直接是单条数据(无数组包裹),比如{"ID": "1", "Name": "Alice", "Address": "123 first street", "Email": "alice@xxx.com"},用以下命令:
jq 'select(.Address == "123 first street")' Myfile.json
为什么不用jq . | grep?
这种方式会先把整个JSON格式化输出,再用grep过滤,不仅会破坏JSON的结构(只输出包含匹配字符串的行,不是完整的JSON对象),而且处理超大文件时,jq可以在解析阶段直接过滤数据,比先输出再过滤高效得多。
内容的提问来源于stack exchange,提问作者exigentcircumstances
相关产品推荐
相关产品推荐

