2017-03-09 21 views
0

我想使用TypeScirp序列化JSON列表,但我找不到方法来处理复杂的嵌套集合。请善待一些光线。如何JSON序列化TypeScript中的嵌套集合

下面是我试图转换的示例结构。

[ 
     { 
     "method": "PATCH", 
     "uri": "/ScrumStarain/_apis/wit/workItems/$Product Backlog Item?api-version=1.0", 
     "headers": { 
      "Content-Type": "application/json-patch+json" 
     }, 
     "body": [ 
      { 
      "op": "add", 
      "path": "/fields/System.Title", 
      "value": "apip1" 
      }, 
      { 
      "op": "add", 
      "path": "/id", 
      "value": "-1" 
      } 
     ] 
     }, 
     { 
     "method": "PATCH", 
     "uri": "/ScrumStarain/_apis/wit/workItems/$Task?api-version=1.0", 
     "headers": { 
      "Content-Type": "application/json-patch+json" 
     }, 
     "body": [ 
      { 
      "op": "add", 
      "path": "/fields/System.Title", 
      "value": "apip2" 
      }, 
      { 
      "op": "add", 
      "path": "/id", 
      "value": "-2" 
      } 

     ] 
     } 

] 

下面是我试图做的示例,我试图动态生成它。我未能添加正文和从属标签。

var state =" xy" ; 
var tagsCollection =["a","b"]; 


    var tempBody : any =[]; 
      tempBody.op = "add"; 
      tempBody.path = "/fields/System.State"; 
      tempBody.value = state; 

    var jsonMainString:any = {}; 
      jsonMainString.method = "PATCH"; 
      jsonMainString.uri="/_apis/wit/workItems/123?api-version=1.0"; 
      jsonMainString.headers = { "Content-Type" :"application/json-patch+json"}; 
      jsonMainString.body = tempBody; 


     console.log(JSON.stringify(jsonMainString)); 

,并最终输出看起来像下面,这是不正确

{"method":"PATCH","uri":"/_apis/wit/workItems/123?api-version=1.0","headers":{"Content-Type":"application/json-patch+json"},"body":[]} 
+0

您遇到的问题是什么?简单地说'JSON.stringify(data)'有什么问题? –

+0

你的例子看起来像是一个JSON服务响应......你实际上是在问怎么去*将JSON序列化成TypeScript? – Aaron

+0

嗨@Aaron,Nitzan Tomer,我更新了更多信息的问题。 – Lalindu

回答

1

你也许应该看看如何操作Arrays in JavaScript。 所以我想你正在尝试的是身体填充。

var state =" xy" ; 
var tagsCollection =["a","b"]; 


var tempBody =[]; 
tempBody.push({ 
    op: "add", 
    path: "/fields/System.State", 
    value: state 
}); 


var jsonMainString = {}; 
jsonMainString.method = "PATCH"; 
jsonMainString.uri="/_apis/wit/workItems/123?api-version=1.0"; 
jsonMainString.headers = { "Content-Type" :"application/json-patch+json"}; 
jsonMainString.body = tempBody; 


console.log(JSON.stringify(jsonMainString)); 
+0

嗨@Stefan Schneider,这正是我想要的。非常感谢。 – Lalindu

1

尝试JSON.stringify(object)将hleped你&代码更改为var tempBody : any ={};

var data= [ 
 
     { 
 
     "method": "PATCH", 
 
     "uri": "/ScrumStarain/_apis/wit/workItems/$Product Backlog Item?api-version=1.0", 
 
     "headers": { 
 
      "Content-Type": "application/json-patch+json" 
 
     }, 
 
     "body": [ 
 
      { 
 
      "op": "add", 
 
      "path": "/fields/System.Title", 
 
      "value": "apip1" 
 
      }, 
 
      { 
 
      "op": "add", 
 
      "path": "/id", 
 
      "value": "-1" 
 
      } 
 
     ] 
 
     }, 
 
     { 
 
     "method": "PATCH", 
 
     "uri": "/ScrumStarain/_apis/wit/workItems/$Task?api-version=1.0", 
 
     "headers": { 
 
      "Content-Type": "application/json-patch+json" 
 
     }, 
 
     "body": [ 
 
      { 
 
      "op": "add", 
 
      "path": "/fields/System.Title", 
 
      "value": "apip2" 
 
      }, 
 
      { 
 
      "op": "add", 
 
      "path": "/id", 
 
      "value": "-2" 
 
      } 
 

 
     ] 
 
     } 
 

 
]; 
 
console.log(JSON.stringify(data));

+0

嗨@ holi-java,非常感谢,但我需要动态生成它。我已经更新了这个问题来详细说明。 – Lalindu

+0

因为'tempBody'是一个数组,所以你不能序列化混合类型的对象,你可以想象一个序列化器如何序列化一个数组的mixin属性。将它作为一个数组?或作为一个对象序列化?所以你必须改变'var tempBody:any = [];''var tempBody:any = {};' –

+0

嗨@ holi-java,感谢很多实现它作为数组解决了我的问题 – Lalindu