Javascript 为什么我的数组需要解析,而它们在控制台中看起来是一样的?

Javascript 为什么我的数组需要解析,而它们在控制台中看起来是一样的?,javascript,arrays,asp.net-mvc,json,d3.js,Javascript,Arrays,Asp.net Mvc,Json,D3.js,我正在研究D3组件,突然想到一个问题。当我体验不同的数组时,我想知道为什么它们都包含相同的数据,却需要不同的数据处理 第一种情况:我有一个“硬编码”数组,如下所示: var tmp = [ { "Weight": 0.0, "Speed": 59.9, "Depth": 362.24000, "Time": "2014-04-09T10:01:23", "Id": 0 }, { "We

我正在研究D3组件,突然想到一个问题。当我体验不同的数组时,我想知道为什么它们都包含相同的数据,却需要不同的数据处理

第一种情况:我有一个“硬编码”数组,如下所示:

var tmp = [
    {
        "Weight": 0.0,
        "Speed": 59.9,
        "Depth": 362.24000,
        "Time": "2014-04-09T10:01:23",
        "Id": 0
    }, {
        "Weight": 10.0,
        "Speed": 59.9,
        "Depth": 394.07000,
        "Time": "2014-04-09T10:01:56",
        "Id": 1
    }];
或者,在Chrome控制台中检查时:

每当我使用此数组馈送组件时,组件工作正常,所有线/轴都正确绘制

第二种情况:我使用d3.json从控制器获取一个数组,并在将其记录到控制台时返回以下内容:

[{"Weight":0.0,"Speed":59.9,"Depth":362.24000,"Time":"2014-04-09T10:01:23","Id":0},{"Weight":10.0,"Speed":59.9,"Depth":394.07000,"Time":"2014-04-09T10:01:56","Id":1}]
因此,每当我尝试执行
json.foreach()
(json是控制器中数组的名称)时:

在启动foreach函数时,出现如下错误:
未捕获类型错误:未定义不是函数

为了实现这一点,我必须对通过
d3.JSON()
从控制器返回的数据执行
JSON.parse(JSON)
,然后我的数组如下所示:

我还应该提到,我的asp.net mvc控制器返回以下内容:

string json = JsonConvert.SerializeObject(Model.Trend.ToArray());

return Json(json, JsonRequestBehavior.AllowGet);
我得到这样一个事实,即在检查控制器返回的数组时,它看起来像一个值字符串,但我真的不明白为什么

所以,我想我的问题真的可以归结为这一点;
为什么我的数组“tmp”可以工作,但使用d3.json获取的数组需要在工作之前进行解析

运行脚本时,浏览器会为您解析“tmp”数组。当您故意创建一个有故障的数组时,您可以检查这一点,例如,在某处放置一个双括号。 您的浏览器会告诉您它不理解您想要的“tmp”变量是什么

但是,当您创建对MVC控制器的调用时,它事先不知道该控制器的结果类型。也许它稍后在应用程序中调用的其他控制器将返回XML数据,这需要另一种解析方法

从“anywhere”获取JSON数据的一个更简单的方法是使用jQuery方法。 这不需要额外的调用来解析数据

还有,你的D3电话是什么样子的?您声明了什么函数来处理回调?

试试看

$.each(json, function (index, d) {
  var date = format(d.Time);
  d.Time = date;
});
$.each(json, function (index, d) {
  var date = format(d.Time);
  d.Time = date;
});