类型脚本:序列化JSON列表

时间:2018-07-24 22:22:48

标签: angular typescript

这就是我今天将JSON列表反序列化为对象列表的方式。

export class StrLst
{
  public lst : Array <string> = new Array <string> ();

  public deserialize (input : any) : StrLst
  {
    for (let i = 0; i < input.length; i ++)
    {
      this.lst.push (input [i]);
    }
    return this;
  }
}



let lst : StrLst = new StrLst().deserialize(["abc", "def"]);

有没有办法摆脱deserialize中的循环?

我考虑将deserialize设为静态并返回分配的Array而不是包装item-class(StrLst)。这是个好主意还是有缺点?我希望收藏而不是包装。

public static deserialize (input : any) : Array <string>
{
     let ret : Array <string> = new Array <string> ();
     ...
     return ret;
}

let lst : Array <string> = StrLst.deserialize (["abc", "def"]);

编辑:JSON的反序列化是一项常见的任务,列表中包含许多JSON。因此,我正在寻找一种通用且优雅的设计。为了反序列化非列表,我使用Object.assing。但是为了简单起见,我仅在示例中使用了字符串。

编辑:我试图简化示例。我需要反序列化,因为JSON列表的元素通常不是字符串,而是更复杂的东西。 JSON也是HTTP请求的响应,而不是硬编码。

1 个答案:

答案 0 :(得分:0)

反序列化是将数据源转换为结构化对象的过程。 如果您尝试实现此目的,则可以使用JSON.parse(data: string),它接受​​JSON字符串并将其转换为JSON对象。

从这个意义上讲,序列化的JSON列表看起来像

"[ jsonObject1, jsonObject2, jsonObject3, ...]"(作为字符串),甚至是

"[ {object1Attribute: value}, {object2Attribute: { innerAtt: innerValue } }, {object3Attribute: [ innerJsonObj1, innerJsonObj2 ]} ]"

反序列化后一个字符串将生成对象:

[ 
  {
    object1Attribute: value
  }, 
  {
    object2Attribute: { 
      innerAtt: innerValue 
    } 
  }, 
  {
    object3Attribute: [ 
      innerJsonObj1, 
      innerJsonObj2 
    ]
  } 
]

您的函数deserialize实际上不是反序列化某些数据,而是转换字符串数组中的所有可迭代变量。 您可以阅读有关JSON.parse here的更多信息。