我从WebService获取了一个xml文件
<MasterProducts> <MasterProduct> <Productcode>023DDC</Productcode> <Description>Dell CRT 17 Computer Monitor E771a</Description> <ThumbPic>NoImage.png</ThumbPic> <RRP>0.000000</RRP> <Stock>2</Stock> </MasterProduct> </MasterProducts>
我使用的Chrome IDE自动将其转换为JSON,我一直试图解析这个没有任何成功,因为我对Javascript很新。
httpResponse返回一个错误变量和一个包含json文件的数据变量。
if(error===false)
{
if(data !== '')
{
objData = data.getElementsByTagName('MasterProducts');
//returns a NodeList here
var items = objData[0].getElementsByTagName('MasterProduct')[0].getElementsByTagName('Description')[0].firstChild.data;
}
else
{
alert("No Data");
}
}
我只获得了节点列表,但我无法从标签中获取所需的数据。
编辑: 使用在线转换器我已经获得了下面的JSON
{
"MasterProducts": {
"MasterProduct": {
"Productcode": "023DDC",
"Description": "Dell CRT 17 Computer Monitor E771a",
"ThumbPic": "NoImage.png",
"RRP": "0.000000",
"Stock": "2"
}
}
}
答案 0 :(得分:1)
根据http://jsonlint.com/,您回来的JSON是有效的,因此您的脚本应该能够使用点表示法访问数据内容,而不必像使用XML一样解析节点
var data ={
"MasterProducts": {
"MasterProduct": {
"Productcode": "023DDC",
"Description": "Dell CRT 17 Computer Monitor E771a",
"ThumbPic": "NoImage.png",
"RRP": "0.000000",
"Stock": "2"
}
}
}
var description = data.MasterProducts.MasterProduct.Description;
说明将包含“Dell CRT 17 Computer Monitor E771a”
答案 1 :(得分:0)
数据似乎是一种字符串。 “getElementsByTagName”仅在dom元素和dom本身上可用(在某些浏览器中)。尝试将您的响应添加到隐藏的div并使用jQuery进行查询。
$("#hidden").html(data);
然后使用jquery查询div,或者您可以直接使用dom。
$("#hidden").find("MasterProducts")[0].getElementsByTagName("MasterProduct")
答案 2 :(得分:0)
您可以将xml直接存储在jQuery obj中,而无需将其添加到dom中,就像其他答案所说的那样。
var $xml = $(data);
然后简单地使用jQuery来定位特定元素,避免使用getElementsByTagName,因为它仅在某些浏览器中可用。
var MasterProducts = [];
$xml.find('MasterProduct').each(function(){
var $masterProduct = $(this);
var masterProduct = {};
$masterProduct.find('*').each(function(){
masterProduct[$(this).get(0).tagName] = $(this).text();
});
MasterProducts.push(masterProduct);
});
最后,您的MasterProducts数组应该包含一个JavaScript对象,然后您可以使用以下调用将其转换为JSON。
var json = JSON.stringify(MasterProducts);
我把它放在jsFiddle上。见http://jsfiddle.net/WRF4D/