将JSON值解析为javascript对象文字

时间:2019-05-20 17:03:27

标签: javascript json typescript object-literal

我有一个休息服务,可以为我创建一些像这样的打字稿代码:

var parametrosUpdate = {
"compania": "this['variable_COMPANIA']",
"elemento": "this['variable_ELEMENTO']",
"serie": "this['variable_SERIE']"
};

但是,我有一个名为variable_COMPANIA的变量,我需要 解析json如下:

var variable_COMPANIA = 'value here';

var parametrosUpdate= {
"compania": this['variable_COMPANIA'],
"elemento": this['variable_ELEMENTO'],
"serie": this['variable_SERIE']
};

因此,基本上,我需要将json解析为对象文字,才能正确用作javascript变量。

我已经尝试过JSON.parse()函数,但对我而言不起作用。

2 个答案:

答案 0 :(得分:1)

var parametrosUpdate = {
"compania": "this['variable_COMPANIA']",
"elemento": "this['variable_ELEMENTO']",
"serie": "this['variable_SERIE']"
};

var variable_COMPANIA = 'value here';

x = parametrosUpdate['compania']
// outputs: "this['variable_COMPANIA']"

eval(x)
// outputs: 'value here'

// if you want to transform the whole object into a new, parsed version, just do:
Object.assign(...Object.entries(parametrosUpdate).map(([k, v]) => ({[k]: eval(v)})))

我的胆量告诉我您真的不需要(或想要)这个。也许这是XY problem。您能为您要做的事情提供更多的背景信息吗?

答案 1 :(得分:0)

您可以使用以下方法:

String.ptototype.toLiteral = function () {
    try {
        return eval(this);
    } catch(err) {
        throw new Error('Incorrect javascript');
    }
};

Object.keys(parametrosUpdate).map(x => parametrosUpdate[x] = parametrosUpdate[x].toLiteral());

或者只是:

Object.keys(parametrosUpdate).map(x => parametrosUpdate[x] = eval(parametrosUpdate[x]));