我有一个json文件,其中包含六个“发票”对象,每个对象为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"
}
这很有意义并且可以正常工作。这些是六个发票对象的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
以正确打印此内容?
这是一个常见的陷阱,您在同一对象构造函数中将data
扩展了两次,并导致了一个combinatorial explosion。下面是正确的方法。
.data[] | {invoice_id: .id, client: .customer_name}