带有 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 数组的主要内容,如果未能解决你的问题,请参考以下文章
PHP将带有一些(重复)元素的XML转换为Json到Json数组[重复]
PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?