2014-01-24 40 views
4

我有一个JSON阵列:转换JSON阵列为单独的JS变量

{"a":"apple,"b":"banana","c":"carrot"} 

我想阵列的每个部分分成单独的变量,即

a = "apple", 
b = "banana"; 
c = "carrot"; 

我用Google搜索我的护目镜但似乎无法找到正确的方法来做到这一点。我是JSON的新手,并且已经完成了一些阅读,但是我后面的内容似乎并没有被我引用。

编辑:似乎有混淆,我的阵列是stringobject。我收到来自PHP的回应如下:

$json = array(
    'a' => $a, 
    'b'  => $b, 
    'c' => $c, 
    ); 
    echo json_encode($json); 

我的JS代码如下:

var data = ajax.responseText; 
data = JSON.parse(data); 

我得到{"a":"apple,"b":"banana","c":"carrot"}作为

json.stringify(data); 
+1

为什么你想要这样做。您可以随时使用obj.a,obj.b,obj.c – sachinjain024

+1

请注意,您的问题/问题与**无关**。 JSON解析后,您正在处理常规的JS数组和对象。 –

+0

@Felix Kling谢谢,注意。 – Wildcard27

回答

7

你如何做到这一点的一个例子是here

它假设你想把变量放到全局范围内。如果是这样的话,这将工作:

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); 
+0

谢谢你的迅速反应。你的例子工作,但由于某种原因错过了数组中的最后一项,所以我得到'未捕获的参考错误:c未定义' – Wildcard27

+0

忽略这一点,它只是与其他相同名称的变量冲突。菜鸟错误。 – Wildcard27

0

在Javascript中的结果,阵列对象和对象是数组。但是它们已经以特殊行为初始化了。

看看这个答案:

https://stackoverflow.com/a/4215753/1311986

你会发现,你想要做一些非常相似。

+0

不是真的。对象不是数组。当然,它们可以被类似地使用,因为如果你有一个像'var obj = {a:1};'这样的对象,你可以通过做类似'obj ['a']'的操作来获取值,但是并不意味着它是一个数组。[这是一个例子](http://jsfiddle.net/uq39L/)。而且,无论如何,答案与问题无关。他(基本上)问如何获取对象的属性并将它们转换为单独的变量,类似于PHP的['extract()'](http://us1.php.net/extract)函数。 – Travesty3

+0

我认为会产生更多混淆,因为JS会允许你做'var arr = []; arr ['key'] ='value';',这会让你相信它是一个带有字符串键的数组,但真正发生的是你要为数组对象设置一个属性。这样做的证明是,在完成此操作后,仍然可以使用'arr.key'访问'value'属性。 – Travesty3

+0

对象不是数组('{} instanceof Array'为false)。如果你认为这是因为你可以通过*括号符号*('obj [foo]')来访问对象,那是因为它是访问对象属性的基本方法之一。括号符号与数组没有任何关系。 **如果**允许访问以数字开头的属性名称来使用点符号,即像'arr.1',那么您可以像这样访问数组。但是由于这是不允许的,支架符号是这两种访问数组元素的唯一方法。 –

0

First of all {"a":"apple,"b":"banana","c":"carrot"} is not an array, it's a simple JSON String.

我们解析JSON字符串可以使用

JSON.parse() 

它是由所有现代浏览器的支持,您还可以找到库here

您可以尝试使用您的应用程序执行此操作: 假设您的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); 
} 

你会得到的输出是这样的:

a: apple, b:banana, c:carrot 
. . . 
. . . 

希望这能解决你的问题。

+0

在你的例子中,'jsonString'虽然不是一个字符串。这是一个数组。另外,###'是什么? –

+0

你声称'{“a”:“apple,”b“:”banana“,”c“:”carrot“}是一个简单的** JSON String **,可能不正确。确定没有上下文,但如果我的代码是:'var obj = {“a”:“apple,”b“:”banana“,”c“:”carrot“};',那么'obj'是一个** JavaScript对象**,不需要任何JSON解析。另外,他的例子没有被包围在方括号中,所以解析它(假设它是一个字符串)将返回一个单一的对象,而不是一个对象数组。 – Travesty3

+0

对不起,我只是把jsonString从引用中保存下来,他可能会得到一个'json数组字符串',假设我回答了这个问题。 – NarendraSoni