带有 JSON 数组的 Jquery - 转换为 Javascript 数组

Posted

技术标签:

【中文标题】带有 JSON 数组的 Jquery - 转换为 Javascript 数组【英文标题】:Jquery with JSON Array - convert to Javascript Array 【发布时间】:2010-10-19 15:05:40 【问题描述】:

我有以下来自 asp.net 网络服务的 XML 输出:

<ArrayOfArrayOfString>
    <ArrayOfString>
        <string>1710</string>
        <string>1711</string>
        <string>1712</string>
        <string>1713</string>
    </ArrayOfString>
    <ArrayOfString>
        <string>Teleszkóp 350mm gázas</string>
        <string>Teleszkóp 150mm olaj</string>
        <string>Teleszkóp 260mm olaj sárga</string>
        <string>Teleszkóp 260mm első</string>
    </ArrayOfString>
</ArrayOfArrayOfString>

我正在使用 JQuery 的 $Ajax 从服务器获取它,它工作正常。 它已转换为 JSON 对象,但如何将其转换回 javascript 数组?

update:问题是,如果用 eval() 解析,这个 Array-in-Array 只会变成一个字符串!

【问题讨论】:

【参考方案1】:

这不是 JSON 对象:它是 xml。 JSON 本质上 javascript,看起来更像这样:

[[“1710”、“1711”、“1712”、“1713”]、[“Teleszkóp 350mm gázas”、“Teleszkóp 150mm olaj”、“Teleszkóp 260mm olaj sárga”、“Teleszkóp 260mm első”]]

【讨论】:

这是真的,它被 web 服务神奇地 JSON 化了;但在 JS 中,我只看到 [Object object] :) [Object object] 是您的数据——您可以像访问数组一样访问它。【参考方案2】:

我假设您的数据正在返回并由 jQuery 自动解析并放入 XML 文档。这是将 XML 对象扁平化为数组的一种方法:

   my parsedData = [];  
   $('result', data).each(function() 
      parsedData.push(  
          name: $('name', this).text(),
           addr: $('addr', this).text(),
           city: $('city', this).text(),
           state: $('state', this).text(),
           zip: $('zip', this).text()
      );

【讨论】:

【参考方案3】:
var array = eval(json.d);

其中array是javascript数组,json是json对象,json.d是json字符串。

【讨论】:

这并不容易:var arr = eval(response.d);警报(arr [1]); -->> 这将返回整个数组,而不是第二项! 这是一个二维数组!尝试:警报(arr[1][1]); @balint - 我认为它在将其用作二维数组时有效?【参考方案4】:

这是我编写的用于将 XML 对象转换为本机 JavaScript 对象(包括数组)的代码。你只需要打电话

Object.fromXML(yourXMLObject)

你会得到一个原生 JavaScript 对象,它的 JSON 等价物是这样的:


  ArrayOfString:
  [
    string: ['1710', '1711', '1712', '1713'],
    string: ['Teleszkóp 350mm gázas', 'Teleszkóp 150mm olaj', 'Teleszkóp 260mm olaj sárga', 'Teleszkóp 260mm első']
  ]

函数源码如下。

/**
 * Tries to convert a given XML data to a native JavaScript object by traversing the DOM tree.
 * If a string is given, it first tries to create an XMLDomElement from the given string.
 * 
 * @param XMLDomElement|String source The XML string or the XMLDomElement prefreably which containts the necessary data for the object.
 * @param Boolean [includeRoot] Whether the "required" main container node should be a part of the resultant object or not.
 * @return Object The native JavaScript object which is contructed from the given XML data or false if any error occured.
 */
Object.fromXML=function(source, includeRoot)

    if (typeof source=='string')
    
        try
        
            if (window.DOMParser)
                source=(new DOMParser()).parseFromString(source, "application/xml");
            else if (window.ActiveXObject)
            
                var xmlObject=new ActiveXObject("Microsoft.XMLDOM");
                xmlObject.async=false;
                xmlObject.loadXML(source);
                source=xmlObject;
                xmlObject=undefined;
            
            else
                throw new Error("Cannot find an XML parser!");
        
        catch(error)
        
            return false;
        
    
    var result=;
    if (source.nodeType==9)
        source=source.firstChild;
    if (!includeRoot)
        source=source.firstChild;

    while (source) 
    
        if (source.childNodes.length) 
        
            if (source.tagName in result) 
            
                if (result[source.tagName].constructor != Array) 
                    result[source.tagName] = [result[source.tagName]];
                result[source.tagName].push(Object.fromXML(source));
            
            else 
                result[source.tagName] = Object.fromXML(source);
        
        else if (source.tagName)
            result[source.tagName] = source.nodeValue;
        else
            result = source.nodeValue;
        source = source.nextSibling;
    

    return result;
;

【讨论】:

【参考方案5】:

如果是JSON,则无需转换任何内容...例如:

var jsonString = ".....";
var converted = eval(jsonString);

JSON 表示 JavaScript 对象表示法,因此 JSON 格式的任何内容都可以直接在 JavaScript 中使用。

您所拥有的是 XML。您应该检查一下并手动转换为 JavaScript。

【讨论】:

【参考方案6】:

如果你明确告诉 jQuery 你期望返回一个 XML 文档(使用 dataType option),或者如果你没有指定数据类型并且服务器仍然正确地将它作为 XML 发送(在这种情况下, jQuery 会猜测并返回responseXML 而不是responseText),您应该能够在成功回调函数中使用以下内容从XML 中提取字符串数组,其中data 是一个XML文件:

$(data).find("ArrayOfString").map(function()

    return $(this).find('string').map(function()
    
        return $(this).text();
    );
);

【讨论】:

【参考方案7】:

您的问题似乎与它的标题不太匹配,但读了几次后,我认为答案是(在 javascript 中):

var JSONstring = '"something":"like this"';
var newArray = JSON.parse(JSONstring);

适用于 Firefox 15.0.1

jQuery的方式是:

 newArray = $.parseJSON(JSONstring);

【讨论】:

以上是关于带有 JSON 数组的 Jquery - 转换为 Javascript 数组的主要内容,如果未能解决你的问题,请参考以下文章

将 Json 转换为 XML - 带有数组值的 Json

PHP将带有一些(重复)元素的XML转换为Json到Json数组[重复]

PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?

如何将带有对象数组的 json 字符串转换为带有 nsdictionaries 的 nsarray - IOS

将表转换为带有长文本列的 JSON 数组

带有预先转换的 json url 的 jQuery UI 自动完成