我是JSON Path的新手,所以这可能比我预期的要简单,如果可能的话。
我有一个JSON块,它由一组组成,每组都有一组字段。每个组也有一个序列,每个字段也是如此。字段序列表示组内的顺序,组序列表示组本身的显示顺序。
我在C#中以编程方式生成了具有不同序列值的项目(组和字段)的平面列表,因此我想验证我的输出,并通过扩展来验证我的分组算法。
JSON块看起来(大大简化)如下:
{
"groups": [
{
"sequence": 0,
"fields": [
{
"sequence": 0
},
{
"sequence": 1
},
{
"sequence": 2
}
]
},
{
"sequence": 1,
"fields": [
{
"sequence": 0
},
{
"sequence": 1
}
]
},
{
"sequence": 2,
"fields": [
{
"sequence": 0
},
{
"sequence": 1
},
{
"sequence": 2
}
]
}
]
}
我正在尝试使用JSON Path验证这一点。为此,我没有工具,所以我使用的是jsonpath online evaluator。
我的目标是按照以下方式输出:
'0'
'sequence' => '0'
'fields'...
'0'
'sequence' => '0'
'1'
'sequence' => '1'
'2'
'sequence' => '2'
// etc...
换句话说,我正在寻找一个JSON路径查询,它可以在层次结构中返回每个组的序列加上组中每个字段的序列。
要获取组的序列,我正在使用以下内容。这很好,并且给了我有用的输出,因为组已经是顶级项目了:
$.groups[*].sequence
输出:
'0' => "0"
'1' => "1"
'2' => "2"
要获取组中字段的顺序,我使用以下内容。这里的输出不太有用,因为如果我在几个组中分布了数十个或更多的字段,那么它就是一个难以阅读的平面列表。
$.groups[*].fields[*].sequence
输出:
'0' => "0"
'1' => "1"
'2' => "2"
'3' => "0"
'4' => "1"
'5' => "0"
'6' => "1"
'7' => "2"
所以最终,问题是:是否有一个JSON路径查询,让我可以在这里分层次地获取我需要的信息?或者我使用错误的工具来完成工作?我想我可以在JavaScript中编写几行代码,如果必须的话,可以让我这样做,但似乎JSON路径可能是一个强大的学习工具,所以如果我能在这里做到,我已经学到了一些东西。
答案 0 :(得分:1)
您不需要变量序列。当你需要序列时,将项目从一个组移动到另一个组,排序你可以在对象中使用数组,在数组中使用对象。
用于排序,移动项目,更改序列的数组。用于对单个项目中的属性进行分组的对象
var groups =
[
{"fields": [
{name: 'field1'},
{name: 'field2'},
{name: 'field3'}
],
},
{"fields": [
{name: 'field1'},
{name: 'field2'},
{name: 'field3'}
]
},
{"fields": [
{name: 'field1'},
{name: 'field2'},
{name: 'field3'}
]
}
];
console.log(groups[0].fields); // Array [ Object, Object, Object ]
console.log(groups[2].fields[0].name); // field1
Function splice是改变序列的最佳选择。在相同的领域和另一个领域 相同字段中变更序列的示例
var oldIndex = 2, newIndex = 0, item = groups[0].fields.splice(oldIndex, 1)[0];
console.log(item);
groups[0].fields.splice(newIndex, 0, item);
console.log(groups);