2012-03-25 65 views
0

嗨,我有它返回的web服务 Web服务的结构就是这样一个返回JSON数据:如何从返回JSON从Web服务访问数据的JavaScript或jQuery的

jsonp1332655154667({"products": [{"uid": "37", 
"samsid": "hjk", 
"name": "Science%20Essentials%2010%20AC%20edn", 
"shortname": "scienceessentials10", 
"description": "Science%20Essentials%2010%20ACE%20is%20the%20fourth%20in%20a%20series%20of%20four%20books%20designed%20for%20the%20National%20Curriculum.%20", 
"generated": "3/25/2012%205:59:19%20AM", 
"Description": "Science%20Essentials%2010%20ACE%20is%20the%20fourth%20in%20a%20series%20of%20four%20books%20designed%20for%20the%20National%20Curriculum.%20", 
"PublishingCompany": "Macmillan%20Australia", 
"Service": "OneStopScience", 
"Service": "OneStopDigital", 
"Icon": "http://curriculumplatform.s3.amazonaws.com/prod/icons/brain48.png", 
"Country": "Australia", 
"Shortname": "scienceessentials10", 
"MarketingSite": "http%3a%2f%2fwww.macmillan.com.au%2fsecondary%2fonix%2fall%2f6F597241EFC0E43DCA257791001CAFC0%3fopen%26div%3dSecondary%26cat%3dScience%253EAustralian%252BCurriculum%26template%3ddomSecondary%26ed%3dsite%2fseced31.nsf", 
"Skin": "OneStopScience%20Green"}, 
"tag":"s_science"' 
"tag":"s_maths"' 
"tag":"s_arts", 
{"uid": "5",}]}) 

我有三个“标签”元素。但是当我们访问products.tag时,它总是给出最后一个元素,如:s_arts。 有什么方法可以找出所有的元素,例如:s_science,s_maths,s_arts。 请帮忙。

+0

尝试'console.log(products.tag)'并告诉我们会发生什么 – Joseph 2012-03-25 06:12:15

+0

是不是无效的JSON? – bernie 2012-03-25 06:14:09

+0

它给出标签:s_arts标签的最后一个元素。 – 2012-03-25 06:14:57

回答

0

如果你在同一个对象中有多个键,你将会得到未定义的行为。只有一个会被保留下来,因为对没有排序,所以你不能保证你会得到哪一个。

简而言之:web服务正在返回错误数据。如果多个标签预计,该服务应在标签属性返回值的数组:

... 
"tag":["s_science", "s_maths", "s_arts"], 
... 
1

它是无效的JSON,你的标签应该是:

..., 
"tag": ["s_science", "s_maths", "s_arts" ], 
... 

然后product.tag将是一个数组,你可以访问成功

问候

+0

我不确定它本身是无效的,但它只能拿一个,我发现它总是需要定义最后一个。 – Tuan 2012-03-25 06:31:01

0

您需要发送标签作为数组:

jsonp1332655154667({"products": [{"uid": "37", 
"samsid": "hjk", 
"name": "Science%20Essentials%2010%20AC%20edn", 
"shortname": "scienceessentials10", 
"description": "Science%20Essentials%2010%20ACE%20is%20the%20fourth%20in%20a%20series%20of%20four%20books%20designed%20for%20the%20National%20Curriculum.%20", 
"generated": "3/25/2012%205:59:19%20AM", 
"Description": "Science%20Essentials%2010%20ACE%20is%20the%20fourth%20in%20a%20series%20of%20four%20books%20designed%20for%20the%20National%20Curriculum.%20", 
"PublishingCompany": "Macmillan%20Australia", 
"Service": "OneStopScience", 
"Service": "OneStopDigital", 
"Icon": "http://curriculumplatform.s3.amazonaws.com/prod/icons/brain48.png", 
"Country": "Australia", 
"Shortname": "scienceessentials10", 
"MarketingSite": "http%3a%2f%2fwww.macmillan.com.au%2fsecondary%2fonix%2fall%2f6F597241EFC0E43DCA257791001CAFC0%3fopen%26div%3dSecondary%26cat%3dScience%253EAustralian%252BCurriculum%26template%3ddomSecondary%26ed%3dsite%2fseced31.nsf", 
"Skin": "OneStopScience%20Green"}, 
"tags": [ 
    "s_science"' 
    "s_maths"' 
    "s_arts" 
], 
{"uid": "5",}]}) 

然后您将它们引用为data.tags[0], data.tags[1], data.tags[2]

0

如果你的反应是这种格式

YourResponse = { 
    "products" : [ 
        {"uid" :"5", ......., "whtever":"someval"}, 
        {"uid" :"6", ......., "whtever":"someval1"} 
       ] 

}; 

您可以使用此

$(YourResponse).each(
function(objName, objValue) { 
    console.log(objName); // wil get object name like uid, whtever 
    console.log(objValue); // wil get object's value 

}); 

所以要得到标签,你将不得不采取团的建议;发送他们在阵列