使用 JQ 将对象数组转换为对象列表
Using JQ to convert an array of object to list of objects
假设我有以下 JSON
[
{
name : "A",
value : "1"
},
{
name : "B",
value : "5"
},
{
name : "E",
value : "8"
}
]
我只想成为
{
name : "A",
value : "1"
},
{
name : "B",
value : "5"
},
{
name : "E",
value : "8"
}
我使用了 jq 普通过滤器,所以 jq'.[]',但是我得到了一个由 return 分隔的对象列表:
{
name : "A",
value : "1"
}
{
name : "B",
value : "5"
}
{
name : "E",
value : "8"
}
请注意,对象之间的逗号神奇地消失了。仅当对象按名称索引时,使用 reduce 才有效,比方说,我使用了以下内容:
jq 'reduce .[] as $i ({}; .[$i.name] = $i)'
有人 运行 遇到过类似情况吗?
如图所示的输入和所需的输出都不是有效的 JSON 或 JSON 流,所以这个问题似乎有问题,因此提供以下答复,但要注意他们可能应该避免。
还应注意,除了 sed-only 方法外,此处提供的解决方案会生成逗号分隔的 JSON,这可能不是所需的。
他们假设准JSON输入在文件qjson.txt
.
中
- 仅 sed
< qjson.txt sed -e '1d;$d; s/^ //'
- hjson、jq 和 sed
< qjson.txt hjson -j | jq -r '.[] | (.,",")' | sed '$d'
- hjson 和 jq
< qjson.txt hjson -j | jq -r '
foreach .[] as $x (-1; .+1;
if . == 0 then $x else ",", $x end)'
假设我有以下 JSON
[
{
name : "A",
value : "1"
},
{
name : "B",
value : "5"
},
{
name : "E",
value : "8"
}
]
我只想成为
{
name : "A",
value : "1"
},
{
name : "B",
value : "5"
},
{
name : "E",
value : "8"
}
我使用了 jq 普通过滤器,所以 jq'.[]',但是我得到了一个由 return 分隔的对象列表:
{
name : "A",
value : "1"
}
{
name : "B",
value : "5"
}
{
name : "E",
value : "8"
}
请注意,对象之间的逗号神奇地消失了。仅当对象按名称索引时,使用 reduce 才有效,比方说,我使用了以下内容:
jq 'reduce .[] as $i ({}; .[$i.name] = $i)'
有人 运行 遇到过类似情况吗?
如图所示的输入和所需的输出都不是有效的 JSON 或 JSON 流,所以这个问题似乎有问题,因此提供以下答复,但要注意他们可能应该避免。
还应注意,除了 sed-only 方法外,此处提供的解决方案会生成逗号分隔的 JSON,这可能不是所需的。
他们假设准JSON输入在文件qjson.txt
.
- 仅 sed
< qjson.txt sed -e '1d;$d; s/^ //'
- hjson、jq 和 sed
< qjson.txt hjson -j | jq -r '.[] | (.,",")' | sed '$d'
- hjson 和 jq
< qjson.txt hjson -j | jq -r '
foreach .[] as $x (-1; .+1;
if . == 0 then $x else ",", $x end)'