将JSON提取到Javascript变量中

时间:2017-02-16 08:09:55

标签: javascript jquery underscore.js

我是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或下划线等流行的库中是否存在对Javascript对象执行相同操作的方法。我的意思是这样的:

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

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

// Here, color is a defined variable

4 个答案:

答案 0 :(得分:3)

您可以这样做:

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

或限制新变量的范围:

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

答案 1 :(得分:2)

您可以使用

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




 console.log(size)   //medium

答案 2 :(得分:2)

标准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。它给你一些很酷的东西。

答案 3 :(得分:0)

使用窗口对象有两个问题:

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

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

  3. 你可以这样做:

    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