Javascript 如何浏览JSON节点结构
我目前正在开发一个Chrome扩展,它调用一个向我发送SOAP XML消息的Web服务。当我收到这条消息时,我必须在上面导航来解析它,但是我遇到了一些问题 xml的结构如下所示:Javascript 如何浏览JSON节点结构,javascript,jquery,xml,json,Javascript,Jquery,Xml,Json,我目前正在开发一个Chrome扩展,它调用一个向我发送SOAP XML消息的Web服务。当我收到这条消息时,我必须在上面导航来解析它,但是我遇到了一些问题 xml的结构如下所示: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="/service.php?
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns:ns1="/service.php?service=components"
xmlns:enc="http://www.w3.org/2003/05/soap-encoding"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc">
<ns1:getComponentsResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<rpc:result>return</rpc:result>
<return enc:itemType="enc:Struct" enc:arraySize="7" xsi:type="enc:Array">
<item xsi:type="enc:Struct">
<m_type xsi:type="xsd:string">image</m_type>
<m_params enc:itemType="enc:Struct" enc:arraySize="4" xsi:type="enc:Array">
<item xsi:type="enc:Struct">
<m_name xsi:type="xsd:string">image</m_name>
<m_value xsi:type="xsd:string">9f00de47f9f07ec0c7389875e4739c2b.png</m_value>
<m_numType xsi:type="xsd:int">3</m_numType>
</item>
<item xsi:type="enc:Struct">
<m_name xsi:type="xsd:string">weblink</m_name>
<m_value xsi:type="xsd:string">http://www.xxx.com</m_value>
<m_numType xsi:type="xsd:int">2</m_numType>
</item>
<item xsi:type="enc:Struct">
<m_name xsi:type="xsd:string">redirect-type</m_name>
<m_value xsi:type="xsd:string">2</m_value>
<m_numType xsi:type="xsd:int">0</m_numType>
</item>
<item xsi:type="enc:Struct">
<m_name xsi:type="xsd:string">is-logo</m_name>
<m_value xsi:type="xsd:string">1</m_value>
<m_numType xsi:type="xsd:int">0</m_numType>
</item>
</m_params>
<m_order xsi:type="xsd:int">0</m_order>
<m_childs enc:itemType="xsd:anyType" enc:arraySize="0" xsi:type="enc:Array"/>
<m_id xsi:type="xsd:int">119</m_id>
<m_name xsi:type="xsd:string">image_4d624ce18aeb3</m_name>
</item>
var json = $.xmlToJSON(xmlhttp.responseXML);
alert(json.item[0].length);
因此,基本上我需要浏览该项,但它不起作用,我不知道是什么原因……由于XML只有一个根标记,当xmlToJSON插件进行解析时,它似乎不是将顶层视为子级,而是视为对象本身的根 我会尝试:
alert(json.m_name);
…或任何您感兴趣的子元素
如果此实现是在,您可以执行以下操作:
alert(root._children.length);
我会使用一个实用程序,比如,或者自己使用for…in来反映像这样的对象,这样您就可以自己看到它的组件是什么了
更新
我不知道如何将jQuery与Chrome扩展一起使用,所以我的测试是使用独立版本。您可以首先尝试验证XML是否可以使用它,然后再开始。例如,如果您包括第一个XMLObjectifier:
不,它不起作用。。。所有的时间都在说来自terracoder的未定义链接是我的来源;您确定XML格式正确吗。当XML格式良好时,我使用的是独立版本。上面的XML格式不好。如果粘贴完整的XML,我们可以查看可能发生的情况。您是否确认responseXML甚至是XML?如果XML有问题,它可能是===null。正如我告诉您的,它只是我的XML的一部分。我刚刚做了一个测试:ifjson==null,它没有输入。因此,我的Xml似乎格式良好。主要的问题是我不知道如何导航…我真的很感谢你的帮助,伙计。我已经测试了你的代码,第一个给我这个:第二个给我所有的XML文件。
// XML truncated to be well-formed
var xml = '<?xml version="1.0" encoding="UTF-8"?>\
<item xmlns:env="http://www.w3.org/2003/05/soap-envelope"\
xmlns:ns1="/service.php?service=components" \
xmlns:enc="http://www.w3.org/2003/05/soap-encoding" \
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" \
xmlns:xsd="http://www.w3.org/2001/XMLSchema" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\
xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"\
xsi:type="enc:Struct">\
<m_type xsi:type="xsd:string">image</m_type>\
<m_params enc:itemType="enc:Struct" enc:arraySize="4" xsi:type="enc:Array">\
<item xsi:type="enc:Struct">\
<m_name xsi:type="xsd:string">image</m_name>\
<m_value xsi:type="xsd:string">9f00de47f9f07ec0c7389875e4739c2b.png</m_value>\
<m_numType xsi:type="xsd:int">3</m_numType>\
</item>\
<item xsi:type="enc:Struct">\
<m_name xsi:type="xsd:string">weblink</m_name>\
<m_value xsi:type="xsd:string">http://www.xxx.com</m_value>\
<m_numType xsi:type="xsd:int">2</m_numType>\
</item>\
<item xsi:type="enc:Struct">\
<m_name xsi:type="xsd:string">redirect-type</m_name>\
<m_value xsi:type="xsd:string">2</m_value>\
<m_numType xsi:type="xsd:int">0</m_numType>\
</item>\
<item xsi:type="enc:Struct">\
<m_name xsi:type="xsd:string">is-logo</m_name>\
<m_value xsi:type="xsd:string">1</m_value>\
<m_numType xsi:type="xsd:int">0</m_numType>\
</item>\
</m_params>\
<m_order xsi:type="xsd:int">0</m_order>\
<m_childs enc:itemType="xsd:anyType" enc:arraySize="0" xsi:type="enc:Array"/>\
<m_id xsi:type="xsd:int">119</m_id>\
<m_name xsi:type="xsd:string">image_4d624ce18aeb3</m_name>\
</item>';
// DOMParser is only Firefox/Safari/Chrome/IE9+ but convenient for debugging:
xml = new DOMParser().parseFromString(xml, 'text/xml');
var json = XMLObjectifier.xmlToJSON(xml);
var str = '';
for (var i in json) {
str += i + '::' + json[i] + '\n';
}
alert(str);
var xmlString = new XMLSerializer().serializeToString(xmlhttp.responseXML);
alert(xmlString);