使用路径从JSON对象获取数据

时间:2019-09-11 12:13:44

标签: javascript json jsonpath

假设我有一个这样的JSON对象:

var data = {
    "name": "abcd",
    "age": 21,
    "address": {
        "streetAddress": "88 8nd Street",
        "city": "New York"
    },
    "phoneNumber": [
        {
            "type": "home",
            "number": "111 111-1111"
        },
        {
            "type": "fax",
            "number": "222 222-2222"
        }
    ]
}

并且我想通过使用像字符串这样的路径来从这个json对象获取信息,例如

var age = 'data/age'; // this path should return age
var cityPath = 'data/address/city'; // this path should return city
var faxNumber = 'data/phoneNumber/1/number'; // this path should return fax number

有什么办法可以从字符串路径获取此信息?目前,我正在用/分割路径,然后像data.agedata.address.city那样使用它。但是这种方法对JSON对象中包含的任何数组都没有用。

JavaScript中是否有更好,更优化的方法来解决此问题?

1 个答案:

答案 0 :(得分:3)

这是您可以从JSON访问数据的方式,无需使用路径:

var data = {
    "name": "abcd",
    "age": 21,
    "address": {
        "streetAddress": "88 8nd Street",
        "city": "New York"
    },
    "phoneNumber": [
        {
            "type": "home",
            "number": "111 111-1111"
        },
        {
            "type": "fax",
            "number": "222 222-2222"
        }
    ]
}

var age = data.age;
var cityPath = data.address.city;
var faxNumber = data.phoneNumber[0].number; // array first item begins with 0

console.log({age, cityPath, faxNumber})

如果由于某些原因确实需要使用路径,我建议使用lodash get方法https://lodash.com/docs#get