Javascript 创建JSON对象更新程序

Javascript 创建JSON对象更新程序,javascript,json,typescript,updates,Javascript,Json,Typescript,Updates,我正在使用javascript中的一个特定JSON对象,该对象包含多个非固定属性(我指的是将来可能更改的属性) 我一直在这样的地方工作: { "propertyA": { "value": "0", "type": "A" }, "propertyB": { "childs": { "propertyC": { "prop": "value", "anotherProp": "randomValue" }

我正在使用javascript中的一个特定JSON对象,该对象包含多个非固定属性(我指的是将来可能更改的属性)

我一直在这样的地方工作:

{
  "propertyA": {
    "value": "0",
    "type": "A"
  },
  "propertyB": {
    "childs": {
      "propertyC": {
        "prop": "value",
        "anotherProp": "randomValue"
      }
    },
    "type": "B"
  }
}
正如您所看到的,并非所有属性都相同,也不是遵循一种模式。这是因为我用它来存储一些配置。问题是,如果我想在将来更改某些内容,假设
“propertyA”
更改为
“propertyA”:{“config”:“0”,键入:“A”}
,我无法将读取这些属性的javascript更改为读取新属性而忘记旧属性,因为如果我收到一个旧配置并尝试访问由最新配置版本名标识的属性,它将破坏应用程序

我的想法是:检查JSON属性>验证JSON“版本”>相应更新>保存更新>读取用新格式更改的JSON属性

到目前为止,我尝试在我的JSON中添加一个
“version”:“1.0”
字段,然后创建一个更新程序来检查所有版本。以给出的示例为例,如果JSON的最新版本是1.2,那么在此之后将
“propertyA”
更新为1.1和1.2版本

但我在这方面面临两个问题:

  • 如果我下载一个非常旧的JSON(存储在1.0/最新的5.2版本中),那么如果经过所有版本直到它达到5.2版本,更新它可能会花费太多时间
  • 用户可以访问数据库。这意味着他可以手动更改JSON版本。我知道这是不可能的,这样做会破坏应用程序,但我希望尽可能保证它的安全
  • 基本上,我想知道如何在我的JSON配置版本之间快速更新,不管收到的配置和最新配置之间有多少不同的版本(比如一个累积更新程序或类似的东西,它会更新到最新版本,不管哪个版本是旧版本),如果可能的话,不需要将版本存储在同一个JSON或DB中(比如根据它具有的属性确定版本)


    PS:如果有助于找到更简单的解决方案,我正在使用Typescript。

    您的两个问题可以很容易地得到缓解-1:不要经常更改API。如果您必须并且转换需要,请允许在用户继续使用您的站点时在后台进行转换(例如使用a);第二:一旦属性键被弃用,就不要重用它们。如果v1.1将
    value
    更改为
    config
    ,不要让v4.5引入一个新属性
    value
    ,另一种方法是编写一个实用程序合并函数,该函数接受每个json文件版本,并将其合并到一个具有版本/文件名属性的新大文件中,然后将json的其余部分作为数据属性。然后使用一个JSON到CSV的转换器——网站也存在类似的情况。。然后在Excel/Googledocs电子表格中加载CSV以比较差异@当然,我不会经常更改API来防止这种行为。但是我喜欢你建议使用
    WebWorker
    的方式,我会仔细研究一下。@JGFMK你的建议看起来有点难实现,但是使用“合并”选项听起来不错,因为更新数据可能会花更少的时间。我还将研究它,以及如何“替换”不推荐的属性,以支持使用相同值的新属性或根据需要转换它。谢谢:)您的2个问题可以很容易地缓解-1:不要经常更改API。如果您必须并且转换需要,请允许在用户继续使用您的站点时在后台进行转换(例如使用a);第二:一旦属性键被弃用,就不要重用它们。如果v1.1将
    value
    更改为
    config
    ,不要让v4.5引入一个新属性
    value
    ,另一种方法是编写一个实用程序合并函数,该函数接受每个json文件版本,并将其合并到一个具有版本/文件名属性的新大文件中,然后将json的其余部分作为数据属性。然后使用一个JSON到CSV的转换器——网站也存在类似的情况。。然后在Excel/Googledocs电子表格中加载CSV以比较差异@当然,我不会经常更改API来防止这种行为。但是我喜欢你建议使用
    WebWorker
    的方式,我会仔细研究一下。@JGFMK你的建议看起来有点难实现,但是使用“合并”选项听起来不错,因为更新数据可能会花更少的时间。我还将研究它,以及如何“替换”不推荐的属性,以支持使用相同值的新属性或根据需要转换它。谢谢:)