2012-10-19 110 views
0

我有AS-JSON字符串解析错误

var RetailerData = {}; 

// The object that the JSON string should represent, can use this as it is if you want. 

RetailerData.webSites = [ 
{ 
    id: 1, 
    text: 'J.Crew', 
    image: 'images/retailer-logo/jcrew.png', 
    extra: 'www.jcrew.com' 
}, 
{ 
    id: 2, 
    text: 'GAP', 
    image: 'images/retailer-logo/gap.png', 
    extra: 'www.gap.com' 
}]; 

我想使用jQuery $.parseJSON让每个值解析它一个JSON字符串。我曾尝试过使用

var obj = $.parseJSON(RetailerData.webSites); 

$.each(obj, function() { 
    console.log(this['id']); 
}); 

但是在每次尝试中都会出现连续错误。任何人都可以告诉一个合适的方法来做这件事 在此先感谢。

+2

JSON是一个**字符串**。你在那里已经有了一个JavaScript对象。这里没有太多解析,呃? –

+0

对不起,如果我问了一些愚蠢的东西,我还处于学习阶段。你能以简单的方式解释我吗?谢谢 – user1719367

回答

0

您正在尝试将JavaScript对象转换为JavaScript对象,这没有任何意义!您可以做的是

var str = JSON.stringify(RetailerData.webSites); 

并使用str将您的数据传输到别的地方。然后使用

var obj = JSON.parse(str); 

,让您的原始对象回来,它已经从另一个来源修改(或没有)之后。

+2

首先序列化一个对象,然后反序列化它是否更有意义?只需立即使用'RetailerData.websites'。 –

+0

因此,“使用'str'将数据传输到其他地方”。将数据串化的全部目的是便携性。 –

+0

考虑到OP在一个代码块中显示了不必要的解析步骤和对象的使用情况,因此可以安全地假定不需要“将数据传输到别处”。序列化仅适用于与需要固定格式(如JSON)的(外部)API进行交互。然而,在JS应用程序中,(de)序列化两次只是一个冗余步骤。 –

0

您可以使用parseJSON将jsonString解析为json对象。

但在你的情况下,RetailerData.webSites已经是一个json对象,不需要解析它。

var obj = RetailerData.webSites; 

$.each(obj, function() { 
    console.log(this['id']); 
}); 
+1

有没有称为“json对象”(不包括'JSON'对象包含'JSON.parse'等)的事情。你实际上的意思是一个JavaScript对象,用对象文字表示('{}')。 JSON中的N代表*符号*; JSON是*字符串格式*,不多也不少。 –

+0

谢谢大家的宝贵帮助。它的工作现在。 – user1719367