使用第一个对象的值在第二个对象中查找对应的值
问题描述:
我正在使用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
到Roger Federer
和Tennis
的查询。
首先,我需要指定上下文(根),然后指定对象的名称。下面是一个例子:
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
啊,罗杰说。我在你的问题中添加了一个xpath标签来帮助XPath专家发现它。 –
谢谢你的回答。我使用的是XPath,因为我使用的CMS(Drupal)有一个很好的模块,它利用XPath并定期分析特定URL中的数据。由于它使得整个集成比自定义解决方案更容易,所以如果有可能,我宁愿使用XPath。 – take2