我有一个巨大的JSON对象,我希望将其过滤掉,只占可用字段的一小部分。我搜索了一些类似的问题,例如enter link description here,但这是针对一组对象的。我有一个类似于:
的JSON对象{
"timestamp":1455408955250999808,
"client":
{
"ip":"76.72.172.208",
"srcPort":0,
"country":"us",
"deviceType":"desktop"},
"clientRequest":
{
"bytes":410,
"bodyBytes":0}
}
我要做的是创建一个看起来像的新JSON对象:
{
"timestamp":1455408955250999808,
"client":
{
"ip":"76.72.172.208",
}
"clientRequest":
{
"bytes":410
}
}
有效地过滤数据。我试过了:
| jq 'map({client.ip: .client.ip, timestamp: .timestamp})'
我继续得到:
jq: error (at <stdin>:0): Cannot index number with string "client"
即使是最简单的| jq 'map({timestamp: .timestamp})'
也会显示相同的错误。
我以为我可以访问K,V对,并使用地图函数,就像上面链接的问题中他的数组一样。任何帮助非常感谢。
答案 0 :(得分:1)
好哇。真的很简单:)
cat LogSample.txt | jq '. | {Id: .Id, client: {ip: .client.ip}}'
基本上自己定义对象:)
答案 1 :(得分:1)
如果构造所需的对象,它看起来最简单。根据您的示例,您可以使用以下过滤器执行此操作:
{ timestamp,
client: { ip: .client.ip },
clientRequest: {bytes: .clientRequest.bytes }
}
相比之下,map
期望其输入为数组,而输入为JSON对象。
另请注意,jq还提供了删除密钥的直接方法,例如:使用del/1
。