我有一个json文件,其中包含六个'invoice‘对象,每个对象都是140+行值。我只想看到这六个对象中每个对象的几个值。jq
似乎是一个很有前途的解决方案。
我使用的是jq version 1.5-1-a5b5cbe
,它可以通过apt
的常规存储库获得。
我可以执行cat stripe-invoices-list.json | jq -C '. | {invoice_id: .data[].id,}'
,它会返回:
{
"invoice_id": "in_1Gq39HFGUwFHXzvlUOGG3Rv4"
}
{
"invoice_id": "in_1GpyM1FGUwFHXzvlio9pfaM9"
}
{
"invoice_id": "in_1GpyHUFGUwFHXzvlHDS727su"
}
{
"invoice_id": "in_1Gpy4HFGUwFHXzvl6k82godp"
}
{
"invoice_id": "in_1GpjNjFGUwFHXzvl880gp0o9"
}
{
"invoice_id": "in_1GSkk7FGUwFHXzvlfWdhcad5"
}
这是有意义的,并且工作正常。这些是六个invoice对象的id。一切都很好,尽管仅仅看到id是没有帮助的。所以..。
我尝试向输出中添加更多数据,但这会产生冗余甚至不正确的输出:
$ cat stripe-invoices-list.json | jq -C '. | {invoice_id: .data[].id, client: .data[].customer_name,}'
结果如下:
{
"invoice_id": "in_1Gpy4HFGUwFHXzvl6k82godp",
"client": "client_two"
}
{
"invoice_id": "in_1Gpy4HFGUwFHXzvl6k82godp",
"client": "client_three"
}
{
"invoice_id": "in_1Gpy4HFGUwFHXzvl6k82godp",
"client": "client_four"
}
{
"invoice_id": "in_1Gpy4HFGUwFHXzvl6k82godp",
"client": "client_five"
}
{
"invoice_id": "in_1Gpy4HFGUwFHXzvl6k82godp",
"client": "client_one"
}
{
"invoice_id": "in_1GpjNjFGUwFHXzvl880gp0o9",
"client": "client_one"
}
{
"invoice_id": "in_1GpjNjFGUwFHXzvl880gp0o9",
"client": "client_two"
}
{
"invoice_id": "in_1GpjNjFGUwFHXzvl880gp0o9",
"client": "client_three"
}
{
"invoice_id": "in_1GpjNjFGUwFHXzvl880gp0o9",
"client": "client_four"
}
{
"invoice_id": "in_1GpjNjFGUwFHXzvl880gp0o9",
"client": "client_five"
}
{
"invoice_id": "in_1GpjNjFGUwFHXzvl880gp0o9",
"client": "client_one"
}
{
"invoice_id": "in_1GSkk7FGUwFHXzvlfWdhcad5",
"client": "client_one"
}
{
"invoice_id": "in_1GSkk7FGUwFHXzvlfWdhcad5",
"client": "client_two"
}
{
"invoice_id": "in_1GSkk7FGUwFHXzvlfWdhcad5",
"client": "client_three"
}
{
"invoice_id": "in_1GSkk7FGUwFHXzvlfWdhcad5",
"client": "client_four"
}
{
"invoice_id": "in_1GSkk7FGUwFHXzvlfWdhcad5",
"client": "client_five"
}
{
"invoice_id": "in_1GSkk7FGUwFHXzvlfWdhcad5",
"client": "client_one"
这给出了冗余和混乱的信息。它是多余的,因为in_1GSkk7FGUwFHXzvlfWdhcad5
被多次列出,并被打乱,因为一个发票与每个客户相关联。
当我在vim中打开stripe-invoices-list.json
文件时,可以看到发票id in_1GSkk7FGUwFHXzvlfWdhcad5
与client_one
相关联。
有没有人能建议是什么导致了这个问题,或者我可以采取的任何调试步骤?怎样才能让jq
正确地打印出来?
发布于 2020-06-04 16:03:33
这是一个常见的陷阱,您在同一个对象构造函数中扩展data
两次,这会导致combinatorial explosion。下面是正确的方法。
.data[] | {invoice_id: .id, client: .customer_name}
https://stackoverflow.com/questions/62198965
复制相似问题