为什么jq打印记录多余且不匹配以及如何解决? [英] why does jq print records redundantly and mismatched and how to fix it?
问题描述
我有一个json文件,其中包含六个发票"对象,每个对象有140多行值.我只希望看到六个对象中每个对象的几个值. jq
似乎是一个有前途的解决方案.
I have a file of json that includes six 'invoice' object, each object is 140+ lines of values. I want to see only a few values for each of the six objects. jq
seemed like a promising solution.
我正在使用jq version 1.5-1-a5b5cbe
,可以通过apt
的常规存储库进行访问.
I'm using jq version 1.5-1-a5b5cbe
which was available via apt
's usual repositories.
我可以做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并没有帮助.所以...
That makes sense and works properly. Those are the id's for the six invoice objects. All is good, though just seeing the id's is not helpful. So...
我尝试将更多数据添加到输出中,但随后会创建冗余甚至错误的输出:
I try to add more data to the output but it then creates redundant and even incorrect output:
$ 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
被多次列出,并且由于每个客户都关联了一张发票而变得混乱.
which is giving redundant and scrambled information. It's redundant because in_1GSkk7FGUwFHXzvlfWdhcad5
is listed multiple times, and scrambled because that one invoice is being associated with every client.
当我在vim中打开stripe-invoices-list.json
文件时,可以看到发票ID in_1GSkk7FGUwFHXzvlfWdhcad5
与client_one
关联.
When I open the stripe-invoices-list.json
file in vim I can see that invoice id in_1GSkk7FGUwFHXzvlfWdhcad5
is associated with client_one
.
任何人都可以建议导致此问题的原因或我可以采取的任何调试步骤吗?
如何获得jq
以便正确打印?
Can anyone suggest what could be causing this problem, or any debugging steps I could take?
How do I get jq
to print this properly?
推荐答案
这是一个常见的陷阱,您在同一对象构造函数中将data
扩展了两次,并导致
This is a common pitfall, you're expanding data
twice in the same object constructor, and it leads to a combinatorial explosion. Below is the correct way of doing it.
.data[] | {invoice_id: .id, client: .customer_name}
这篇关于为什么jq打印记录多余且不匹配以及如何解决?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!