将对象 属性 转换为每个键一个元素的数组
Convert object property to array with one element per key
我正在尝试使用 Jolt 将对象转换为一个数组,原始对象中的每个键都有一个数组元素。我希望输出对象将原始键包含为 属性,并保留源值的所有属性。我需要为输入属性处理三种情况:
"key": null
"key": {}
"key": {...}
这是一个例子:
{
"operations": {
"foo": null,
"bar": {},
"baz": {
"arbitrary": 1
}
}
}
以及所需的输出
{
"operations": [
{
"operation": "foo"
},
{
"operation": "bar"
},
{
"operation": "baz",
"arbitrary": 1
}
]
}
Note: foo
, bar
and baz
are arbitrary here. It needs to handle any property names inside the operations
object.
这真的很接近我想要的:
[
{
"operation": "default",
"spec": {
"operations": {
"*": {}
}
}
},
{
"operation": "shift",
"spec": {
"operations": {
"*": {
"$": "operations[].operation"
}
}
}
}
]
但它从 baz
操作中删除 "arbitrary": 1
。
或者,这会保留操作中的属性,但不会为操作名称添加键:
[
{
"operation": "default",
"spec": {
"operations": {
"*": {}
}
}
},
{
"operation": "shift",
"spec": {
"operations": {
"*": {
"@": "operations[]"
}
}
}
}
]
如能提供这两种行为的任何帮助,我们将不胜感激。
您可以使用一级 shift
转换规范以及符号用法(通配符)而不是重复文字,例如
[
{
"operation": "shift",
"spec": {
"*s": {
"*": {
"$": "&2[#2].&(2,1)",
"*": "&2[#2].&"
}
}
}
}
]
哪里
&2
表示通过遍历 {
符号向上 2 层树两次以选择密钥名称 operations
(如果它只是 &->eg.identicals &(0) or &(0,0), 则只遍历冒号到达$进行抓取它的价值)
[#2]
也代表走2层遍历{
符号和:
标志,因为它已经位于 Rright Hand [=44=规范的]Side,为了询问到达的节点有多少匹配
&(2,1)
subkey lookup 表示在树上向上移动 2 级并获取到达的键名对象的第一个参数,以及由 *
通配符分区的键的哪一部分由第二个参数使用。 (在这种情况下,我们生成没有复数后缀的文字operation
)
*
通配符,总是在 Left H和Side,表示其余属性(else case).
站点 http://jolt-demo.appspot.com 上的 演示 是
我正在尝试使用 Jolt 将对象转换为一个数组,原始对象中的每个键都有一个数组元素。我希望输出对象将原始键包含为 属性,并保留源值的所有属性。我需要为输入属性处理三种情况:
"key": null
"key": {}
"key": {...}
这是一个例子:
{
"operations": {
"foo": null,
"bar": {},
"baz": {
"arbitrary": 1
}
}
}
以及所需的输出
{
"operations": [
{
"operation": "foo"
},
{
"operation": "bar"
},
{
"operation": "baz",
"arbitrary": 1
}
]
}
Note:
foo
,bar
andbaz
are arbitrary here. It needs to handle any property names inside theoperations
object.
这真的很接近我想要的:
[
{
"operation": "default",
"spec": {
"operations": {
"*": {}
}
}
},
{
"operation": "shift",
"spec": {
"operations": {
"*": {
"$": "operations[].operation"
}
}
}
}
]
但它从 baz
操作中删除 "arbitrary": 1
。
或者,这会保留操作中的属性,但不会为操作名称添加键:
[
{
"operation": "default",
"spec": {
"operations": {
"*": {}
}
}
},
{
"operation": "shift",
"spec": {
"operations": {
"*": {
"@": "operations[]"
}
}
}
}
]
如能提供这两种行为的任何帮助,我们将不胜感激。
您可以使用一级 shift
转换规范以及符号用法(通配符)而不是重复文字,例如
[
{
"operation": "shift",
"spec": {
"*s": {
"*": {
"$": "&2[#2].&(2,1)",
"*": "&2[#2].&"
}
}
}
}
]
哪里
&2
表示通过遍历{
符号向上 2 层树两次以选择密钥名称operations
(如果它只是 &->eg.identicals &(0) or &(0,0), 则只遍历冒号到达$进行抓取它的价值)[#2]
也代表走2层遍历{
符号和:
标志,因为它已经位于 Rright Hand [=44=规范的]Side,为了询问到达的节点有多少匹配&(2,1)
subkey lookup 表示在树上向上移动 2 级并获取到达的键名对象的第一个参数,以及由*
通配符分区的键的哪一部分由第二个参数使用。 (在这种情况下,我们生成没有复数后缀的文字operation
)*
通配符,总是在 Left H和Side,表示其余属性(else case).
站点 http://jolt-demo.appspot.com 上的 演示 是