将json对象字符串转换为值

Turn a json object string into value

本文关键字:转换 字符串 json 对象      更新时间:2023-09-26

我正在编写一个函数,它接受一个字符串,对其进行拆分,并使用json[key][key2][key3]格式。问题是n可能是无限的(不是字面上的,但需要这样写)

function getJsonValue(json,string) {
    var vals = string.split(".");
    var x = vals.length;
    var string = '';
    while (x != 0) {
      string += "['"+vals[(vals.length-x)]+"']"
        x--
    }
    return string;
}

这将产生,例如:"['condition']['item']['condition']['temp']"

我需要通过将其附加到json对象(如)来从中提取一个值

json"['condition']['item']['condition']['temp']"

但我不知道这是怎么实现的,也不知道这是否可能。

编辑:问题是,我需要传入配置文件中的任何值,然后通过返回函数进行解析。即,用户知道该特定查询的值将为condition.item.condition.temp。我正试图编写一个涵盖所有内容的函数,并为我所知道的输出传递配置值。因此,在一个查询中,我可能想要condition.item.condition.temp值,在另一个查询上,我可能需要condition.wind.chill.

我不确定我是否100%理解你想要做的事情,但如果你收到一个JS对象json和一个格式为field1.field2.field3的字符串,并试图获得json.field1.field2.field3的值,那么你可以做这样的事情:

function getJsonValue(json,string) {
    var vals = string.split(".");
    for (var i = 0; i < vals.length; i++) json = json[vals[i]];
    return json;
}

对于一个给定的对象来说,它是这样工作的:

var obj = { field1: { field2: { field3: "Hello!" } } };
var res = getJsonValue(obj, "field1.field2.field3"); 
console.log(res); // prints Hello

查看lodash获取

_.get(json, 'key1.key2.key3')

您可以根据当前代码构建"路径",并要求lodahs为您获取价值。

做一个eval怎么样?

var json = {
    'one': {
        'two': {
            'three': {
                'four': 4
            }
        }
    }
};
alert(eval("json['one']['two']['three']['four']"))