javascript - 使用第一个对象的值在第二个对象中查找对应的值

标签 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 的查询到罗杰·费德勒网球

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

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/

相关文章:

selenium xpath 点击了错误的文本

python - 为什么我从网络抓取中得到空列表?

javascript - 将 .ai 或 .svg 文件放到网络上,不使用 Flash

javascript - D3 多轴插补

javascript - 分解 angular.js 中 404 响应的原因

javascript - 使用 javascript 迭代子对象并获取所有值

javascript - 忽略出现在引号内的分隔符的 JS split() 函数

PHP JSON获取每个键的特定值

python - 如何让 python base64 编码与 json 兼容?

xml - 如何在 XPath/XQuery 中获取所有后代?