将json对象字符串转换为值

时间:2016-01-07 21:57:39

标签: javascript

我正在编写一个函数,它接受一个字符串,拆分它,并使用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。

3 个答案:

答案 0 :(得分:2)

我不确定我是否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

答案 1 :(得分:0)

请参阅lodash get

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

您可以从当前代码构建“路径”,并要求lodahs为您获取价值。

答案 2 :(得分:0)

做一个评估怎么样?

var json = {
    'one': {
        'two': {
            'three': {
                'four': 4
            }
        }
    }
};

alert(eval("json['one']['two']['three']['four']"))