反序列化可能具有需要反序列化的属性的子级

时间:2018-02-21 13:07:53

标签: javascript json ecmascript-6 signalr

在我的ASP.NET后端,我返回一个名为a.G的模型数组,使用SignalR可以有Job个孩子的工作量。一项工作可能如下:

n

正如您所看到的,每个工作都可以有一个孩子,可以有另一个孩子,等等。每个作业还有一个{ "id": 0, "json": '{"error": "Some error"}', "children": [{ "id": 1 }, { "id": 3, "children": [{ "id": 4, "json": '{"error": "Some other error"}' }] }] } 属性,它是文本字符串中的JSON。我想将这些反序列化为常规JavaScript对象,如下所示:

json

所以基本上是这样的:

  1. 如果作业有var deserialized = { "id": 0, "json": { "error": "Some error" }, "children": [{ "id": 1 }, { "id": 3, "children": [{ "id": 4, "json": { "error": "Some other error" } }] }] } 属性,只需json
  2. 如果这份工作有孩子,可以让所有孩子上学,
  3. 重复1
  4. 我怎样才能做到这一点?我猜递归是一种方式,但我宁愿看看是否可以使用新的ES6方法。

1 个答案:

答案 0 :(得分:1)

  

1.如果作业有json属性,只需执行job.json = JSON.parse(job.json)

     

2.如果这份工作有孩子,可以让所有孩子上学,

     

3.重复1

假设在一个作业中你有json JSON stringchildren两个属性,那么我们必须逐个执行两个点(1& 2)来转换嵌套的{{1作业的属性为json

在这种情况下,首先我们必须将JSON Object属性转换为json然后我们必须使用children数组迭代整个作业。

尝试使用filter()函数的数组ES6 Arrow方法。

工作演示:

JSON Object