为什么jq打印记录多余并且不匹配?以及如何解决?

问题描述 投票:0回答:1

我有一个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-in​​voices-list.json文件时,我看到发票ID in_1GSkk7FGUwFHXzvlfWdhcad5client_one相关联。

有人可以建议导致此问题的原因或我可以采取的任何调试步骤吗?如何获得jq以正确打印此内容?

json io jq
1个回答
0
投票

您在同一对象构造函数中两次爆炸data,这就是为什么。您需要:

.data[] | {invoice_id: .id, client: .customer_name}
© www.soinside.com 2019 - 2024. All rights reserved.