【问题标题】:Why does my array need parsing, when they look the same in the console?为什么我的数组需要解析,当它们在控制台中看起来相同时?
【发布时间】:2014-04-15 07:39:18
【问题描述】:

当我想到一个问题时,我正在处理 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 是来自控制器的数组的名称):

json.forEach(function(d) {
    var date = format(d.Time);
    d.Time = date;
});

我在启动 foreach 函数时收到如下错误消息: Uncaught TypeError: undefined is not a function.

为了让它工作,我必须对通过d3.json()从我的控制器返回的数据执行JSON.parse(json),然后我的数组如下所示:

我还应该提到我的 asp.net mvc 控制器返回这个:

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

return Json(json, JsonRequestBehavior.AllowGet);

我发现我从控制器返回的数组在检查时看起来像一串值,但我真的不明白为什么。

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

【问题讨论】:

    标签: javascript arrays asp.net-mvc json d3.js


    【解决方案1】:

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

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

    从“任何地方”获取 JSON 数据的更简单方法是使用 jQuery .getJSON 方法。 这不需要额外调用来解析数据。

    另外,你的 D3 调用是什么样的?你声明了什么函数来处理回调?

    【讨论】:

      【解决方案2】:

      试试

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 2010-12-10
        相关资源
        最近更新 更多