如何将对象附加到数组?
How to append a object to a array?
我有一个这样的输入 json 文件,
{
"foo":[
"key1",
"key2"
],
"bar": "key3"
}
这里是jq过滤器的定义方式,
[.[] | . as { foo: $names, bar: $name} | {
names: [ $names | range(0;length) as $i | {
key: ($names[$i])
}],
} | {
values: .names,
}]
这将生成一个 json 文件,
<input.json jq --slurp --from-file concat.jq > output.json
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
}
]
}
]
现在我想将 key3
附加到输出 json 并将过滤器定义为这样,
[.[] | . as { foo: $names, bar: $name} | {
names: [ $names | range(0;length) as $i | {
key: ($names[$i])
}] |= .+ {key: $name},
} | {
values: .names,
}]
这好像不行,
<input.json jq --slurp --from-file concat.jq > output.json
导致以下异常,
jq: error: syntax error, unexpected |=, expecting '}' (Unix shell quoting issues?) at <top-level>, line 4:
}] |= .+ {key: $name},
jq: 1 compile error
我该如何解决这个问题?
使用 map
并直接构建对象不是更简单吗?
<input.json jq --slurp 'map({values: (.foo + [.bar] | map({key:.}))})'
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
},
{
"key": "key3"
}
]
}
]
这能实现你想要的吗:
q --slurp '[
.[] | . as { foo: $names, bar: $name} |
{
names: ([
$names | range(0;length) as $i |
{ key: ($names[$i]) }
] + [{ key: $name }])
} |
{
values: .names,
}
]' input.json
我有一个这样的输入 json 文件,
{
"foo":[
"key1",
"key2"
],
"bar": "key3"
}
这里是jq过滤器的定义方式,
[.[] | . as { foo: $names, bar: $name} | {
names: [ $names | range(0;length) as $i | {
key: ($names[$i])
}],
} | {
values: .names,
}]
这将生成一个 json 文件,
<input.json jq --slurp --from-file concat.jq > output.json
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
}
]
}
]
现在我想将 key3
附加到输出 json 并将过滤器定义为这样,
[.[] | . as { foo: $names, bar: $name} | {
names: [ $names | range(0;length) as $i | {
key: ($names[$i])
}] |= .+ {key: $name},
} | {
values: .names,
}]
这好像不行,
<input.json jq --slurp --from-file concat.jq > output.json
导致以下异常,
jq: error: syntax error, unexpected |=, expecting '}' (Unix shell quoting issues?) at <top-level>, line 4:
}] |= .+ {key: $name},
jq: 1 compile error
我该如何解决这个问题?
使用 map
并直接构建对象不是更简单吗?
<input.json jq --slurp 'map({values: (.foo + [.bar] | map({key:.}))})'
[
{
"values": [
{
"key": "key1"
},
{
"key": "key2"
},
{
"key": "key3"
}
]
}
]
这能实现你想要的吗:
q --slurp '[
.[] | . as { foo: $names, bar: $name} |
{
names: ([
$names | range(0;length) as $i |
{ key: ($names[$i]) }
] + [{ key: $name }])
} |
{
values: .names,
}
]' input.json