将JSON数据重新定义为源代码中的JavaScript对象是否有好处?

时间:2018-05-25 14:52:38

标签: javascript json javascript-objects

我通过JavaScript中的XMLHttpRequest从Web服务器加载JSON文件。此模块或JSON.parse方法返回JSON Object(常规JavaScript对象,我称之为w3schools的JSON对象。)

加载的JSON数据:

{
    "MyName":"Kiwi",
    "MyNum" : "42",
    "MyList" : {
    "$type" :"Bla",
    "$values: [ ]
    }
};

我可以传递已解析的对象并像常规JavaScript对象一样访问它的属性。但是,我想知道在源代码中实际声明对象的属性是否有意义,例如:

// MyObject.js
function MyObject() {
    this.myName = "Kiwi";
    this.myNum = 42;
    this.myList = []
}

基本上,将我解析的JSON对象中的每个属性映射到源代码中声明的JavaScript对象(以及其他转换):

var myObj = new MyObject();
myObj.myName = jsonObject.MyName;
myObj.myNum = jsonObject.MyNum;

我认为这有以下好处:

  1. 实际类型信息,例如数字与字符串
  2. 我的IDE中潜在的智能感知/自动完成功能
  3. 如果JSON属性发生变化,则更容易升级数据
  4. 我使用JSON.NET等序列化程序将我的方法与使用C#等语言解析JSON的方法进行比较。

    这在JavaScript世界中也是常见做法,还是应该坚持使用JSON.parse方法返回的JSON对象?

    更多信息: 我的特殊用例是JSON数据的处理,其中包括许多元字段(由诸如" $ type"或" $ values"等名称表示,以表示数组)。这些文件是由JSON.NET创建并序列化C#对象,我基本上在我的JavaScript应用程序中镜像。因此,我可能想要重新声明与原始C#类声明方式更相似的属性。主要是这会将myObject.aList.$values[0]之类的调用转换为myObject.aList[0]

1 个答案:

答案 0 :(得分:2)

如果您需要的不仅仅是JSON提供的数据类型,您可以自行滚动以处理JSON.parse吐出的项目,或使用多个库like this one

大多数人的用例很简单,他们不需要一个支持更多“丰富”数据存储的库,JSON就可以了。

如果您提前知道数据结构,并且需要将JSON日期(存储为字符串)转换为Javascript日期,则最好在加载JSON时转换它。如果您有复杂的需求需要加载您无法提前预测的复杂数据类型,请使用像Transit.js这样的库