我正在使用JSON Path parser来解析一些数据。以下是源数据的示例:
{
"people": [
{
"initials": "RF",
"sport": "T"
},
{
"initials": "LM",
"sport": "F"
}
],
"definitions": {
"RF": {
"def_1": "Roger Federer",
"def_2": "Roger"
},
"LM": {
"def_1": "Lionel Messi",
"def_2": "Lionel"
},
"T": {
"def_1": "Tennis"
},
"F": {
"def_1": "Football"
}
}
}
现在,如果我只使用数组 (people
),它几乎毫无用处,RF
和 T
没有多大意义。然而,它们是在对象(definitions
)中定义的。 RF
表示 Roger Federer
,T
表示 Tennis
,所以我还需要导入这两个。我可以轻松导入 RF
和 T
,但我很难找到连接 RF
和 T
的查询到罗杰·费德勒
和网球
。
首先,我需要指定上下文(根),然后指定对象的名称。这是一个例子:
Context: $.[]
Query: initials
Result is: RF
当我将所有这些导入到节点中时,此示例可以很好地导入数组(people
)数据。
这是我现在可以成功导入的内容:
Field1 value: RF
Field2 value: T
我需要什么:
Field1 value: RF
Field2 value: T
**Field4 value: Roger Federer**
**Field5 value: Tennis**
基本上,我想更好地描述我从 people
数组中获得的内容。这是我尝试过的组合之一,但它不起作用:
Context: $.[]
Query: initials.def_1
Query: people.initials.def_1
有办法实现吗?
最佳答案
对于如此简单的数据结构,XPath 听起来有点大材小用。也许还有其他原因需要使用 XPath,但这在纯 JavaScript 中非常简单。例如:
var data = {
"people": [
{
"initials": "RF",
"sport": "T"
}, {
"initials": "LM",
"sport": "F"
}
],
"definitions": {
"RF": {
"def_1": "Roger Federer",
"def_2": "Roger"
},
"LM": {
"def_1": "Lionel Messi",
"def_2": "Lionel"
},
"T": {
"def_1": "Tennis"
},
"F": {
"def_1": "Football"
}
}
};
data.people.forEach( function( person ) {
var name = data.definitions[person.initials].def_1;
var sport = data.definitions[person.sport].def_1;
console.log( name, 'plays', sport );
});
日志:
Roger Federer plays Tennis
Lionel Messi plays Football
关于javascript - 使用第一个对象的值在第二个对象中查找对应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347233/