Javascript Json数据-键值,Object.Keys错误
我试图从json数据中解析出所有键Javascript Json数据-键值,Object.Keys错误,javascript,jquery,json,Javascript,Jquery,Json,我试图从json数据中解析出所有键 <script type="text/javascript"> $(document).ready(function () { $.ajax({ type: "POST", url: "History.aspx/GetFTEData", dataType: "json", contentType: "application/jso
<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>
如果您必须支持较旧的浏览器,您可以尝试并找到如何使用较旧的样式/API执行类似任务的示例。例如,您可以通过如下操作循环JavaScrip对象道具:
for (var property in object) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
发现了类似的问题/代码示例
然而,
Object.keys()
是所有主要浏览器的支持。包括IE11,参考。问题似乎在于数据[0]
仍处于JSON状态。这通常发生在对单个对象进行编码,然后对其封闭数组进行编码时。单个对象进行双重编码
作为测试,请尝试以下方法:
var parsed = JSON.parse(data[0]);
console.log(Object.keys(parsed));
如果这显示了您想要的结果,那么说明问题出在双重编码上
但是,再次解析它并不是解决方案。你需要在生成JSON数据的服务器上解决这个问题,这样它就不会被双重编码。链接的JSFIDLE的代码与你在这里发布的代码毫无关系。你能举一个例子说明
数据所包含的内容吗?(从Object.keys()
:)Firefox对Object.keys
没有问题,你的JSFIDLE工作得很好添加了一个我的数据示例vs2015与Firefox的关系如何?那么我的JSFIDLE如何处理返回给我的JS对象的相同数据。。。Visual studio发现了一个错误??0x800a138f-JavaScript运行时错误:Object.keys:参数不是对象我不确定VS为什么会抛出该错误。然而,这里有一个例子,你可以试着看看它是否解决了你的问题。对象问题已解决。。。然而奇怪的是,headerData却没有定义。。。。但是,我的data.d具有返回的字符串。。。。。这告诉我,与实际返回的数据相比,我的JSFIDLE数据的格式有问题,这是有道理的。在代码中加入一个控制台日志来查看实际返回的数据是没有坏处的。一个很好的选择是这样做console.log(JSON.stringify(data[0],null,2);
这将在控制台中打印data[0]
对象,并进行格式化。这起到了作用……许多月前就已经使用过了……var jsondata=$.parseJSON(data.d)@Philo:我不明白这个.d
属性是从哪里来的。根据你给我们的信息,数据
是一个数组。在任何情况下,非常确定服务器上有一些编码问题需要解决。很好。现在我的列标题只是-0 1 2 3 4…哈哈。我还没有解决这个问题。但是Object.keys不是thr由于一个错误。然后,data.d
指向您的数组,正如我上面所怀疑的。所以Object.keys(jsondata[0]);
@Philo:即使在使用对象时,你也不能真正依赖对象中键的顺序。键
。我会先手动输入客户名称,从对象中删除它,对年份进行排序,然后再添加这些。不管你怎么做,你都需要找到一种方法来手动保证顺序。
var parsed = JSON.parse(data[0]);
console.log(Object.keys(parsed));