我正在尝试使用 Jolt 转换来转换 JSON,在这里寻找一些输入。我正在尝试将所有级别中的所有项目放入一个数组中。
我的目标是获得一个包含所有项目的数组,而不知道我在json中有多少个级别。
这是我的输入和预期输出:
如果我有三个等级:
输入:
{
"id": 11,
"item": [
{
"id": "11_1",
"item": [
{
"id": "11_1_1",
"item": [
{
"id": "11_1_1_1"
}
]
},
{
"id": "11_1_2",
"item": [
{
"id": "11_1_2_1"
}
]
}
]
}
]
}
预期产出:
[
{
"id": "11_1"
},
{
"id": "11_1_1"
},
{
"id": "11_1_1_1"
},
{
"id": "11_1_2"
},
{
"id": "11_1_2_1"
}
]
如果我有两个级别:
输入:
{
"id": 11,
"item": [
{
"id": "11_1",
"item": [
{
"id": "11_1_1"
},
{
"id": "11_1_2"
}
]
}
]
}
预期产出:
[
{
"id": "11_1"
},
{
"id": "11_1_1"
},
{
"id": "11_1_2"
}
]
我试着写下这样的话:
[
{
"operation": "shift",
"spec": {
"item": { //to cover the second level
"*": "item"
}
}
},
{
"operation": "shift",
"spec": {
"item": {
"*": { //to cover the 3td level
"item": {
"*": "item"
}
}
}
}
}
]
结果为空,如果我单独运行每个转换,我会在适用时得到结果。你能帮我写一个简单的规范吗?
使用库乔森无限水平的解决方案。
https://github.com/octomix/josson
反序列化
Josson josson = Josson.fromJsonString(
"{" +
" \"id\": 11," +
" \"item\": [" +
" {" +
" \"id\": \"11_1\"," +
" \"quantity\": 1," +
" \"action\": \"add\"," +
" \"state\": \"x\"," +
" \"item\": [" +
" {" +
" \"id\": \"11_1_1\"," +
" \"quantity\": 2," +
" \"action\": \"drop\"," +
" \"state\": \"y\"" +
" }," +
" {" +
" \"id\": \"11_1_2\"," +
" \"quantity\": 3," +
" \"action\": \"modify\"," +
" \"state\": \"z\"" +
" }" +
" ]" +
" }" +
" ]" +
"}");
转型
JsonNode node = josson.getNode("item.cumulateCollect(field(item:), item)");
System.out.println(node.toPrettyString());
语句字段(项:)
从当前对象中删除字段项
。cumulateCollect()
的第二个参数表示下一个级别。在本例中为项目
。
输出
[ {
"id" : "11_1",
"quantity" : 1,
"action" : "add",
"state" : "x"
}, {
"id" : "11_1_1",
"quantity" : 2,
"action" : "drop",
"state" : "y"
}, {
"id" : "11_1_2",
"quantity" : 3,
"action" : "modify",
"state" : "z"
} ]
如果输入像您的情况一样最多有3个级别,则使用此规范
[
{
"operation": "shift",
"spec": {
"item": {
"*": {
"id": "&",
"item": {
"*": {
"id": "&",
"item": {
"*": {
"id": "&"
}
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"id": {
"*": "[#1].&1"
}
}
}
]
以便仅使用这一个来处理两种情况。如果还需要一个级别,则添加
,
"item": {
"*": {
"id": "&"
}
}
就在最里面
"id": "&"
编辑:如果您有一些不同于< code>id的其他属性,就像下面的输入示例中那样
{
"id": 11,
"item": [
{
"id": "11_1",
"quantity": 1,
"action": "add",
"state": "x",
"item": [
{
"id": "11_1_1",
"quantity": 2,
"action": "drop",
"state": "y"
},
{
"id": "11_1_2",
"quantity": 3,
"action": "modify",
"state": "z"
}
]
}
]
}
而不仅仅是一点点修改就可以处理您的新案例:
[
{
"operation": "shift",
"spec": {
"item": {
"*": {
"*": "&",
"item": {
"*": {
"*": "&",
"item": {
"*": {
"*": "&"
}
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": "[#1].&1"
}
}
}
]
这将产生:
[
{
"id": "11_1",
"quantity": 1,
"action": "add",
"state": "x"
},
{
"id": "11_1_1",
"quantity": 2,
"action": "drop",
"state": "y"
},
{
"id": "11_1_2",
"quantity": 3,
"action": "modify",
"state": "z"
}
]
我正在尝试使用 Jolt 转换来转换 JSON,在这里寻找一些输入。我正在尝试将所有级别中的所有项目放入一个数组中。我的目标是获得一个包含所有项目的数组,而不知道我在 json 中有多少个级别。 这是我的输入和预期输出: 输入: 预期产出: 我的震动规格: 结果: 只有前4项包含id和foo,但并不是它们的foo值都只有一个。 你能告诉我怎么做对吗?
我正在尝试使用Jolt transformation转换一个JSON,在这里寻找一些输入。我试图将所有级别的内部项目放入一个数组中。我的目标是得到一个包含部分条目的数组,而不需要知道我在一个spen中的一个列表中有多少级。 这是我的输入和预期输出: 输入: 预期产出:(列表) 我的震动规格: 我的输出: 如果输入中有多个项目,我会得到一个列表,但如果只有一个项目,则不会。你知道我应该怎么把它转换成
如何将焦点更改为另一个字段,例如JButton?还是把注意力集中在一起?当前,当我的应用程序加载时,它会选择(看起来是)一个随机的JTextField来设置焦点! 我试过了 但是在这里没有运气。我也尝试过如何解除JTextField的焦点,但是我也没有任何运气。 我不想关注JTextFields的原因是为了避免在应用程序首次加载时没有出现提示。 正如你从图片中看到的,在JTextFields上没有
我继承了一台真正古老的Jenkins服务器,需要从操作系统开始重新构建,我正准备将我们的构建迁移过来。然而,有一个多分支管道,特别是有几十个特性/错误修复/etc分支和构建,需要大量的时间和资源。当我最初在测试集群上设置其多分支管道时,所有分支的初始构建占用了所有资源数小时,直到我杀死它们。 我想做的是让所有分支最初都导入,但在分支再次推送或PR之前不会构建。目前,我已经应用了定义的“抑制自动SC
我一直在玩API、XAPI和OSM的天桥。但我无法获得所需的一些信息:获取街道的所有信息节点。 这里有一个例子:http://www.openstreetmap.org/browse/way/5671291 这提供了一种称为“瓦茨街”(在纽约)的方式的信息,但它不是所有的街道,只是其中的一部分。 另一部分:http://www.openstreetmap.org/browse/way/461163
所以我有一个棋盘,表示为64大小的数组,左上角的正方形为0,右下角的正方形为63。我有这个函数,可以给出国王所有可能的移动。 其中i是King当前所在的正方形的编号。 如果国王不在棋盘边缘,这一点就行了。 但是,如果国王位于右下角的方块上,即数字63,则函数会将数字56的左下角方块作为国王移动的有效位置。 有没有什么有效的方法可以知道国王正在走向另一个边缘,这不是一个有效的举动? 我几乎所有的作品