如何使用jq将嵌套JSON对象扁平化为制表符分隔结构?
使用jq将嵌套JSON扁平化为制表符分隔格式
原始JSON结构
{ "id":1, "activities":[ {"time":1659800397,"cities":["london","paris"],"type":1}, {"time":1659800411,"cities":["rome"], "type":2} ] }
目标格式(制表符分隔)
id time cities type 1 1659800397 london 1 1 1659800397 paris 1 1 1659800411 rome 2
jq实现命令
jq -r '["id", "time", "cities", "type"], (.activities[] | .cities[] | [.id, .time, ., .type]) | @tsv' input.json
命令解释
-r:输出原始文本(去除JSON字符串引号)["id", "time", "cities", "type"]:生成表头行.activities[]:遍历activities数组中的每个活动对象.cities[]:遍历每个活动内的cities数组,将每个城市拆分为单独行[.id, .time, ., .type]:构造每行的字段数组:.id:引用顶层的id值.time/.type:引用当前活动对象的对应字段.:指代当前遍历到的城市名称
@tsv:将数组转换为制表符分隔的字符串
若需从标准输入读取JSON,可改用管道:
cat input.json | jq -r '["id", "time", "cities", "type"], (.activities[] | .cities[] | [.id, .time, ., .type]) | @tsv'
内容的提问来源于stack exchange,提问作者bongo
相关产品推荐
相关产品推荐

