Javascript 如何浏览JSON节点结构

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?

我目前正在开发一个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?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);