2014-01-24 41 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