2011-09-12 68 views
0

如果我dataType = 'JSON'通过AJAX得到这个:如何获得嵌套的响应值?

[{"extras": {"tags": "[<Tag: tag1>, <Tag: tag2>]"}}] 

如何我可以创建像这样的链接:

<a href="tag/ + value.extras.tags.tag1">tag1</a> 
<a href="tag/ + value.extras.tags.tag2">tag2</a> 

+0

你确定你希望href实际上是'tag/+ value.extras.tags.tag1',还是你希望它是'tag/tag1'? –

+1

这不是一个“真正的”JSON对象 - 括号内的双引号和<...>而不是{...}意味着您必须编写自己的解析器。 – Blazemonger

+0

'tag/tag1'就是我想要的 – krzyhub

回答

2
var tags = data[0].extras.tags.replace(/[\[\]]/g, '').split(', '); 
$.each(tags, function(i,v){ 
    var tag = v.match(/<Tag:\s(.*)>/); 
    if(tag !== null){ 
    var href = 'tag/'; 
    // <a href="tag/tag1">tag1</a> 
    var $link = $('<a/>').attr('href', href+tag[1]).text(tag[1]); 
    $('#myDiv').append($link); 
    } 
}); 

注意:我建议您遵循@ jfriend00的建议,并更改JSON的结构。无论如何,我会在这里留下它,因为它适用于你所拥有的数据。

+0

@Cris:'$('#myDiv')。append($ link)'应该可以工作。我测试了这个代码,'console.log($ link)'对我来说工作正常。 –

+0

您有完整的权利。我的错。谢谢。 – krzyhub

2

您的JSON数据对我没有任何意义。你已经基本上得到了这个:

jsonObj[0].extras.tags 

为一个字符串值,等于这个:

"[<Tag: tag1>, <Tag: tag2>]" 

因此,为了使该字符串的任何意义,就必须手动解析,它的不清楚你的问题究竟是你想从这个字符串中创建到标签中。

我建议你将你想要的实际数据放到它自己的JSON值中,而不是把你的数据全部放在一个字符串中,然后再次解析。

如果你想澄清这个问题,我们可以帮助更多。

基于其他意见,我想你想你的JSON是这个所以无需手动分析,所有数据将进入实际的JavaScript对象:

[{"extras": {"tags": ["tag1", "tag2"]}}] 

然后,你可以做这样的循环访问变量值:

var tagArray = jsonObj[0].extras.tags; 
for (var i = 0; i < tagArray.length; i++) { 
    var tagVal = tagArray[i]; 
    // do what you want here with tagVal 
} 

如果你的JSON第一阵列可以有多个元素,它和你想看到所有的人,那么你可以遍历它们太:

var tagArray; 
for (var j = 0; j < jsonObj.length; j++) { 
    tagArray = jsonObj[j].extras.tags; 
    for (var i = 0; i < tagArray.length; i++) { 
     var tagVal = tagArray[i]; 
     // do what you want here with tagVal 
    } 
} 
+0

但是我有更多的价值元素。 – krzyhub

+0

我在回答中增加了一些内容,以解释如何修改您的JSON以消除手动解析。 – jfriend00

+0

嗯...铬说'标签'是未定义的。 – krzyhub