我试图从JSON数据中解析所有键。
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "POST",
url: "History.aspx/GetFTEData",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
var returnedstring = data.d;
var colHeader = Object.keys(data[0]); <---- error line
}
});
});
</script>
但是,var colHeader = Object.keys(data[0]);
在我的IE 11或Firefox浏览器上使用我的IDE(VS2015)运行时,即使它在JSFiddle中起作用,也无法使用它: -
https://jsfiddle.net/qpu3cn5u/
错误消息:-0x800a138f -JavaScript运行时错误:object..keys:参数不是对象
我有什么选择?这样我只能将键作为我试图用值填充的HTML表的列名。
数据的示例: -
var data = `[{"Customer Name":"XXXX","1999":76.000,"2000":68.000,"2001":49.000,"2002":41.000,"2003":47.000,"2004":56.000,"2005":33.000,"2006":51.000,"2007":56.000,"2008":52.000,"2009":55.000,"2010":52.000,"2011":57.000,"2012":55.000,"2013":93.000,"2014":92.000,"2015":62.000,"2016":71.833},{"Customer Name":"YYYYY","1999":29.000,"2000":27.000,"2001":35.000,"2002":37.000,"2003":32.000,"2004":29.000,"2005":44.000,"2006":49.000,"2007":69.000,"2008":109.000,"2009":108.000,"2010":150.000,"2011":189.000,"2012":215.000,"2013":53.000,"2014":78.000,"2015":65.000,"2016":63.000},{"Customer Name":"ZZZZ","1999":0.000,"2000":0.000,"2001":0.000,"2002":0.000,"2003":0.000,"2004":0.000,"2005":0.000,"2006":0.000,"2007":0.000,"2008":0.000,"2009":0.000,"2010":0.000,"2011":0.000,"2012":28.000,"2013":36.000,"2014":59.000,"2015":90.000,"2016":94.000},{"Customer Name":"AAAAA","1999":0.000,"2000":0.000,"2001":0.000,"2002":0.000,"2003":0.000,"2004":0.000,"2005":0.000,"2006":0.000,"2007":0.000,"2008":0.000,"2009":0.000,"2010":0.000,"2011":0.000,"2012":18.000,"2013":18.000,"2014":18.000,"2015":19.000,"2016":18.000}]`
似乎问题是data[0]
仍处于JSON状态。当您编码各个对象,然后编码其封闭数组时,这通常会发生。单个对象进行双重编码。
作为测试,请尝试以下操作:
var parsed = JSON.parse(data[0]);
console.log(Object.keys(parsed));
如果这显示了您想要的结果,则告诉您双重编码是问题。
但是,再次解析它不是解决方案。您需要在生成JSON数据的服务器上进行修复,以使其不会进行双重编码。
如果您必须支持较旧的浏览器,则可以随时尝试找到如何使用旧样式/API执行类似任务的示例。例如,您可以通过执行类似的操作来绕过Javascrip对象道具:
for (var property in object) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
在此处找到的类似问题/代码示例。
但是,Object.keys()
是支持所有主要浏览器。包括IE11,请参考。