Javascript 将JSON数组转换为单个JS变量

Javascript 将JSON数组转换为单个JS变量,javascript,arrays,json,variables,Javascript,Arrays,Json,Variables,我有一个JSON数组: {"a":"apple,"b":"banana","c":"carrot"} 我想把数组的每个部分分割成单独的变量 a = "apple", b = "banana"; c = "carrot"; 我用谷歌搜索了一下我的护目镜,但似乎找不到正确的方法。我是JSON新手,读过不少书,但我所追求的似乎并不在我的掌握范围之内 编辑:对于我的数组是字符串还是对象,似乎存在混淆。我收到PHP的回复如下: $json = array( 'a' => $a,

我有一个JSON数组:

{"a":"apple,"b":"banana","c":"carrot"}
我想把数组的每个部分分割成单独的变量

a = "apple",
b = "banana";
c = "carrot";
我用谷歌搜索了一下我的护目镜,但似乎找不到正确的方法。我是JSON新手,读过不少书,但我所追求的似乎并不在我的掌握范围之内

编辑:对于我的数组是
字符串还是
对象,似乎存在混淆。我收到PHP的回复如下:

$json = array(
    'a' =>  $a,
    'b'     =>  $b,
    'c' =>  $c,
    );
    echo json_encode($json);
var data = ajax.responseText;
data = JSON.parse(data);
我的JS代码如下:

$json = array(
    'a' =>  $a,
    'b'     =>  $b,
    'c' =>  $c,
    );
    echo json_encode($json);
var data = ajax.responseText;
data = JSON.parse(data);
我得到了
{a:“苹果”,b:“香蕉”,“c:“胡萝卜”}
,因为

json.stringify(data);

在Javascript中,数组是对象,对象是数组。但它们已经用特殊的行为初始化

看看这个答案:


你会发现你想做一些非常相似的事情。

这里有一个例子说明了如何做到这一点

它假设您希望将变量放入全局范围。如果是这种情况,这将起作用:

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

var obj = {"a":"apple","b":"banana","c":"carrot"}

extract(obj);

alert(a);
alert(b);
alert(c);
首先,{“a”:“apple”,b”:“banana”,“c”:“carrot”}不是数组,它是一个简单的JSON字符串

现在要解析JSON字符串,您可以使用

JSON.parse()
所有现代浏览器都支持它,您也可以找到该库

您可以尝试使用您的应用程序执行此操作: 假设jsonString是一个数组

 var jsonObj = $.parseJSON("### json string #####");

 for(var index = 0; index < jsonObj.length; index++){
     console.log("a:"+jsonObj[index].a+",b:"+jsonObj[index].b+",c:"+jsonObj[index].c);
 }

希望这能解决您的问题。

为什么要这样做。您可以始终使用obj.a、obj.b、obj.c请注意,您的问题与JSON无关。解析JSON后,您就可以使用常规JS数组和对象了。@Felix Kling,谢谢,不是真的。对象不是数组。当然,它们也可以类似地使用,因为如果您有一个对象,比如
var obj={a:1}
,您可以通过执行类似于
obj['a']
的操作来获取值,但这并不意味着它是一个数组。而且,在任何情况下,答案都与问题无关。他(基本上)在问如何获取一个对象的属性并将它们转换成单独的变量,类似于PHP的函数;arr['key']='value',这使您相信这是一个带有字符串键的数组,但真正发生的是您正在对数组对象设置属性。证明这一点的是,完成此操作后,仍然可以使用
arr.key
访问“value”属性。对象不是数组(
{}instanceof Array
为false)。如果您认为这是因为您可以通过括号符号(
obj[foo]
)访问对象,那么,这是因为它是访问对象属性的基本方法之一。括号符号与数组没有任何关系。如果允许它访问以点表示法中使用的数字开头的属性名称,例如
arr.1
,那么您也可以这样访问数组。但由于不允许使用括号表示法,因此括号表示法是这两种访问数组元素的方法中唯一的一种。@Travesty3:它不会自动转换为对象。数组从一开始就是对象(有额外的方法和行为)。@FelixKling:是的,你说得对。我的措辞很糟糕。好在我还在编辑期;-)在您的示例中,
jsonString
不是字符串。这是一个数组。另外,
###
的内容可能不正确。如果没有上下文,我们无法确定,但是如果我的代码是:
var obj={a:“apple”,b:“banana”,“c:“carrot”}
是一个简单的JSON字符串,那么我的代码可能是:
var obj={a:“apple”,b:“banana”,“c:“carrot”}
,则
obj
是一个JavaScript对象,不需要任何JSON解析。另外,他的示例没有用方括号括起来,因此解析它(假设它是一个字符串)将返回一个对象,而不是一个对象数组。很抱歉,我刚刚从引用中保留了
jsonString
,如果我回答了这个问题,他可能会得到一个
json数组字符串。谢谢您的快速回复。您的示例可以工作,但由于某种原因,遗漏了数组中的最后一个条目,因此我得到
未捕获的引用错误:未定义c
忽略它,它只是与同名的其他变量冲突。新手失误,回答得很好!但是,如果您只想将变量加载到本地函数范围,而不是全局窗口范围,该怎么办呢。(我知道这是一个边缘案例需要,但会更干净。)也许这需要
eval()
?@SimonEast:除了
eval()
,我想不出任何方法来做这件事,但我在考虑这种方法时会非常小心。如果您的值来源于用户输入,那么恶意用户可能会插入将要执行的代码。