将 JSON 提取到 Javascript 变量中

Extract JSON into Javascript variables

我是 javascript 的新人,这是一个新手问题:

在php中,有一个extract()方法可以从关联数组导入变量。例如:

$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array);
// $color is a defined varible here with the value of "blue"

我想知道标准 Javascript 或 jQuery 或 underscore 等流行库中是否有方法对 Javascript 对象执行相同的操作。我的意思是这样的:

jsObject = {"color" : "blue",
            "size"  : "medium",
            "shape" : "sphere"};

extract(jsObject); // Is there such a thing?

// Here, color is a defined variable

您可以使用

function extract(jsObject){
    for (var key in jsObject) {
       window[key] = jsObject[key];
    }
}




 console.log(size)   //medium

你可以这样做:

Object.getOwnPropertyNames(obj).forEach(k => window[k] = obj[k]);

或者限制新变量的范围:

Object.getOwnPropertyNames(obj).forEach(k => this[k] = obj[k]);

标准 Javascript 中没有任何东西可以像那样工作,但如果你使用 ES6,你可以像这样解构你的对象

const obj = {
    color: 'blue',
    size: 'medium',
    shape: 'sphere',
}

const { color, size, shape } = obj;

console.log(color, size, shape) // blue medium sphere

您可以使用 Babel 将您的代码转换为 ES6。如果你刚开始,它现在对你来说可能有点高级,所以我建议你坚持使用直观的方法,但几周后一定要检查一下 Babel。它为您提供了一些非常酷的东西。

使用 window 对象有 2 个问题:

  1. 它及其所有属性都是默认的全局变量。可能不感兴趣。

  2. 必须假设它存在于所有浏览器中(现在是这样)。想想Nodejs

你可以这样做:

for (var key in jsObject) {
    eval('var ' + key + ' = ' + jsObject[key]);
}

试试这个,可能会有帮助:

(function () {
    var jsObject = {color: 'blue'};

    // Dynamically assign to local variables
    for (var key in jsObject) {
        eval('var ' + key + ' = ' + jsObject[key]);
    }

    // Test locally
    console.log(color);
})();

// Test globally
console.log(color);

结果:

'blue'
[error] color is not defined