Typescript将数组转换为JSON

时间:2018-01-04 18:11:32

标签: json typescript

我有一个复杂的数据结构,我需要转换为JSON。问题是我的字段名称和值都在一个数组中。

例如,我有以下内容(从我的代码库中简化):

let SampleData = [
        { Field: 'Key', Value: '7'},
        { Field: 'City', Value: 'Some City'},
        { Field: 'Description', Value: 'Some Description'}
];

基本上我的数据是一个数组,其中第一个元素是数据库列名,第二个元素是列中的数据。我正在尝试获取一个JSON对象:

{ Key: 7, City: 'Some City', Description: 'Some Description' }

我的真实代码中的字段和数据是对象中的结构,所以我不能简单地使用Object.create()或Object.assign(),只要我能够工作。

我已经尝试了循环来构建一个简单的字符串,然后使用JSON.parse将它拆开,但这似乎是一些我认为会更简单的开销。

3 个答案:

答案 0 :(得分:5)

正如你所问,这是怎么做的:

  1. 将数组映射到对象
  2. 将对象转换为JSON
  3. 
    
    let array = [{
        Field: 'Key',
        Value: '7'
      },
      {
        Field: 'City',
        Value: 'Some City'
      },
      {
        Field: 'Description',
        Value: 'Some Description'
      }
    ];
    
    // #1 Mapping the array to an object...
    let obj = {};
    array.forEach(item => obj[item.Field] = item.Value);
    
    // #2 Converting the object to JSON...
    let json = JSON.stringify(obj);
    
    console.log(json);
    
    
    

答案 1 :(得分:1)

您可以尝试以下方法。我使用了spread operator(ES6)和Object.assign来创建对象,然后将其转换为json字符串。



        let SampleData = [
                { Field: 'Key', Value: '7'},
                { Field: 'City', Value: 'Some City'},
                { Field: 'Description', Value: 'Some Description'}
        ];
        
    let obj = Object.assign(...SampleData.map( x => Object.values(x)).map(y => ({[y[0]]: y[1]})));
    console.log(obj);
   //{ Key: "7", City: "Some City", Description: "Some Description" }
    console.log(JSON.stringify(obj));




答案 2 :(得分:0)

我也有类似的要求,这是我达到要求的方式。

var ranges: segmentRange[] = new Array(2);
ranges[0] = { minimumPercentage: 50, maximumPercentage: 60 };
ranges[1] = { minimumPercentage: 30, maximumPercentage: 40 };        
const segmentRanges = { segmentRanges: ranges };
return JSON.stringify(segmentRanges);

输出:

{“ segmentRanges”:[{“ minimumPercentage”:50,“ maximumPercentage”:60},{“ minimumPercentage”:30,“ maximumPercentage”:40}]}}

HTH,