使用jq重塑json数据

时间:2017-05-23 15:09:21

标签: json data-manipulation jq

我试图重塑一个json文档,我认为使用jq很容易,但我现在已经尝试了好几个小时但没有成功......

(请注意,我不是jq jedi且文档没有帮助)

我想离开这个:

{
  "results": [
    {
      "profile": {
        "birthYear": 1900,
        "locale": "en_EN",
        "city": "Somewhere, Around",
        "timezone": "2",
        "age": 52,
        "gender": "m"
      },
      "UID": "SQSQSQerl7XSQSqSsqSQ"
    }
  ]
}

到此:

{
   "birthYear": 1900,
   "locale": "en_EN",
   "city": "Somewhere, Around",
   "timezone": "2",
   "age": 52,
   "gender": "m",
   "UID": "SQSQSQerl7XSQSqSsqSQ"
}

我使用此过滤器得到以下内容: .results [] .profile,.results []。UID

{
   "birthYear": 1900,
   "locale": "en_EN",
   "city": "Somewhere, Around",
   "timezone": "2",
   "age": 52,
   "gender": "m"   
}
"UID": "SQSQSQerl7XSQSqSsqSQ"

先谢谢你的帮助..

2 个答案:

答案 0 :(得分:5)

您可以使用加法运算符组合两个对象。

jq '.results[] | .profile + {UID}'

.profile已经是一个对象了。

使用{}创建另一个对象。 {UID}是{“UID”的缩写:.UID}

答案 1 :(得分:1)

可能有更好的方法但是你去了

jq '.results[0].profile * .results[0] | del(.profile)'

说明:

通过A * B将recursivly容器与嵌套容器合并,然后通过管道传递到del(以删除嵌套容器