如何使用jq合并同一JSON文件内的对象与数组生成mailing_address数组
jq实现公共字段批量合并到数组所有元素方案
首先需要先修正原始JSON的语法问题:你提供的示例中所有字符串类型值(比如New York、123 Main Street)缺失包裹的双引号,补全后才是可被jq正常解析的合法JSON,修正后的原始JSON结构参考:
{ "Cities": { "city": "New York", "zip_code": "10034", "state": "NY" }, "addresss": [ { "address_line1": "123 Main Street", "address_line2": "Unit 130" }, { "address_line1": "5th Avenue", "address_line2": "East River Tower" } ] }
执行命令
直接运行以下jq命令即可输出你需要的结构:
jq '{mailing_address: [.addresss[] + .Cities]}' 你的JSON文件路径
逻辑说明
.addresss[]会遍历地址数组下的每一个独立对象- 遍历过程中对每个地址对象,通过
+运算符和根节点的.Cities对象做键值对合并:jq中两个对象做+运算时,会将后者的所有字段追加到前者对象中 - 所有元素合并完成后包裹为数组,赋值给
mailing_address字段即可匹配预期输出
输出效果
命令执行后返回的结果和你要求的结构完全一致:
{ "mailing_address": [ { "address_line1": "123 Main Street", "address_line2": "Unit 130", "city": "New York", "zip_code": "10034", "state": "NY" }, { "address_line1": "5th Avenue", "address_line2": "East River Tower", "city": "New York", "zip_code": "10034", "state": "NY" } ] }
之前尝试的方法仅给第一个元素追加字段,是因为直接对数组整体和Cities对象做了合并操作,没有先遍历数组内每个元素单独执行合并逻辑,才会出现字段只追加一次的问题。
内容的提问来源于stack exchange,提问作者seetharaman nandyal
相关产品推荐
相关产品推荐

