Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Json数据-键值,Object.Keys错误_Javascript_Jquery_Json - Fatal编程技术网

Javascript Json数据-键值,Object.Keys错误

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

我试图从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>

如果您必须支持较旧的浏览器,您可以尝试并找到如何使用较旧的样式/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));