如何用jq提取嵌套对象指定字段并重构UN/LOCODE JSON数据
用jq重构UN/LOCODE JSON以减小体积:保留指定字段并转换结构
你可以通过在INDEX中直接指定保留字段,或者对INDEX结果使用map_values过滤两种方式实现需求,以下是具体方案:
方法1:一步到位(更高效)
直接在INDEX函数中定义要保留的字段,避免先生成完整对象再过滤,节省内存和时间:
jq 'INDEX("\(.Country)-\(.Location)", {Name, Coordinates})' input.json > output.json
INDEX的第二个参数{Name, Coordinates}会让生成的每个嵌套对象仅包含这两个字段,最终输出结构为:
{ "AD-CAN": { "Name": "Canillo", "Coordinates": "4234N 00135E" }, ... }
方法2:分步处理
如果需要先完成数组转对象的操作,再单独过滤字段,可以用map_values遍历顶层对象的所有值,仅保留目标字段:
jq 'INDEX("\(.Country)-\(.Location)") | map_values({Name, Coordinates})' input.json > output.json
map_values({Name, Coordinates})会对每个嵌套对象执行字段筛选,仅保留Name和Coordinates。
两种方法都能有效减小JSON体积,无需编写自定义脚本即可完成需求。
内容的提问来源于stack exchange,提问作者Alnitak
相关产品推荐
相关产品推荐

