使用第一个对象的值来查找第二个对象中的对应值

时间:2015-07-10 17:52:47

标签: javascript json xpath jsonpath

我使用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),它几乎无用,RFT并不意味着什么。但是,在对象(definitions)中定义它们。 RF表示Roger FedererT表示Tennis,因此我还需要导入这两个。我可以轻松导入RFT,但我很难找到将RFT连接到Roger Federer和{{1}的查询}}

首先,我需要指定上下文(root),然后指定对象的名称。这是一个例子:

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

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分: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