record/store 数值数据以何种格式进一步 JavaScript 处理?

In which format to record/store numerical data for further JavaScript processing?

我计划在几个月内(每天)收集一些数据,以便在 JavaScipt 中进一步处理和表示(可能使用任何 js 库,例如 d3.js 等。我不知道哪个一个)。数据将包括:

您会推荐哪种 file/data 格式来记录数据以供后续使用 JavaScript 工作?

我认为 CSV 在这里更合适,因为它听起来像是一长串数据点。

JSON 工作,就像 XML 或任何其他系统会工作一样,但尽管我喜欢 JSON,它不一定是 well-suited 的工作:

  • JSON 将是 space-inefficient。它需要很多标点符号。

  • JSON 将是 memory-inefficient。要向 JSON 文件添加任何内容,您需要:

    1. 将整个文件作为一个长字符串读取
    2. 将该长字符串解析为 JSON,将其作为大哈希或数组保存在内存中
    3. 插入您的新数据
    4. Re-encode 大哈希或数组作为一个长字符串
    5. 用新的长字符串覆盖旧文件
  • JSON 将更难阅读...除非它以 "pretty" 格式存储,在这种情况下它会更 space-inefficient.

CSV 需要更少的多余标点符号,您可以在文件末尾追加一行新数据,而无需读取和写入整个文件。

考虑:

JSON(不漂亮):

{"01012016":[42,0.8675309],"01022016":[12,9.87654321]}

JSON(漂亮):

{
  "01012016":[
    42,
    0.8675309
  ],
  "01022016":[
    12,
    9.87654321
  ]
}

CSV:

01012016,42,0.8675309
01022016,12,9.87654321

Javascript 没有 built-in CSV 解析器 JSON.parse... 因为解析 CSV 真的很容易!这只是众多方法中的一种:

var splitByLine = myCSVString.split("\n");
var splitByLineAndComma = [];
splitByLine.forEach(function(line){
  splitByLineAndComma.push(line.split(","));
});

我会默认使用 JSON,它不仅轻量级,而且 JavaScript 还内置了 easy-to-use JSON 解析器:JSON.parse.

JSON 是 name/value 对的集合,听起来非常适合您建议的用例:

[
    {
        "my-date": 1451744353495,
        "my-int": 42,
        "my-decimal": 3.1415926535
    },
    {
        "my-date": 1451744353496,
        "my-int": 43,
        "my-decimal": 2.7182818284
    },
    {
        "my-date": 1451744353497,
        "my-int": 44,
        "my-decimal": 1.4142135623
    }
]

如果您有 JSON 作为字符串,只需将其弹出到 JSON.parse,您就可以开始使用闪亮的新 JavaScript 对象了:

var obj = JSON.parse(str);
obj[0]["my-int"] === 42; // true