【问题标题】:Prevent the need for including quotes for keys in json files?防止需要在 json 文件中包含键的引号?
【发布时间】:2021-05-07 23:46:01
【问题描述】:

我的程序中包含一个非常大的 JSON 数据文件。文件格式如下:

{
  "2":{"x":0,"y":0,"w":16,"h":16},
  "3":{"x":5,"y":9,"w":7,"h":12},
  "4":{"x":2,"y":5,"w":12,"h":11},
  ...
}

我像这样包含它:

import * as colliders from "../assets/colliders.json";

问题是它似乎需要在键中使用引号。也就是说,如果我尝试将数据文件设为这样的格式(不带引号):

{
  2:{x:0,y:0,w:16,h:16},
  3:{x:5,y:9,w:7,h:12},
  4:{x:2,y:5,w:12,h:11},
  ...
}

然后我在编译我的 Typescript 时收到以下错误:

Error TS1327: String literal with double quotes expected.

可以只强制使用引号,但它会使文件大小增加 33% 左右。如果我不必在 JSON 文件中包含引号,我会更喜欢。这可能吗?还是在文件大小增加的情况下保留引号是更好的做法?

【问题讨论】:

  • 键必须是字符串(参见json.org)才能获得有效的 JSON。看起来 JSON5 在这里也没有帮助。也许看看 YAML,这将需要第三部分库来解析。因此,无论哪种方式,您似乎都会支付罚款。另一种选择是创建您自己的格式,针对您的用例进行优化。

标签: javascript json typescript


【解决方案1】:

您可以使文件不是 .json 文件,而是 JavaScript 或 TypeScript 文件,然后执行以下操作:

// colliders.ts
export const colliders = {
  2:{x:0,y:0,w:16,h:16},
  3:{x:5,y:9,w:7,h:12},
  4:{x:2,y:5,w:12,h:11},
  // ...
}
import { colliders } from "../assets/colliders.ts";

但在实际应用程序中,键分隔符所需的额外空间几乎可以肯定是不必担心的。

【讨论】:

    【解决方案2】:

    如果您真的很在意空间,并且考虑到您似乎总是有相同的列(X、Y、W、H),我会将所有对撞机存储在 CSV 文件中,然后创建一个例程来读取该文件并从中构建一个 JSON 在内存中。

    (我不确定您是否可以在代码中访问文件系统,但这将是我前进的方向)。

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2022-12-11
      • 2012-06-08
      • 2011-10-13
      • 1970-01-01
      • 2020-07-09
      相关资源
      最近更新 更多