打字稿将数组转换为 JSON

Posted

技术标签:

【中文标题】打字稿将数组转换为 JSON【英文标题】:Typescript convert an array to JSON 【发布时间】:2018-06-14 12:46:45 【问题描述】:

我有一个复杂的数据结构,需要将其转换为 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 将其拆分,但这对于我认为更简单的事情来说似乎有很多开销。

【问题讨论】:

试试这个:将数组映射到对象var obj = ; array.forEach(item => obj[item.Field] = item.Value);,然后将对象转换为json JSON.strignify(obj) 谢谢,成功了。如果您将此作为答案发布,我可以接受。您确实在下面的答案之前得到了这个,这也有效。 @SevenScott 很高兴为您提供帮助!我刚刚发布了我的答案。 【参考方案1】:

如你所问,方法如下:

    将数组映射到对象 将对象转换为 JSON

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);

奖励(ES6 + reduce):

const obj = array.reduce((acc,  Field, Value ) => ( ...acc, [Field]: Value ), );

【讨论】:

【参考方案2】:

您可以尝试以下方法。我使用扩展运算符(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));

【讨论】:

【参考方案3】:

我也有类似的要求,这就是我实现它的方法。

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,

【讨论】:

以上是关于打字稿将数组转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 转换为数组打字稿

将firebase json转换为打字稿数组

在打字稿中将 JSON 转换为字符串数组

为啥打字稿将联合中的属性标记为不存在?

我可以使用打字稿将对象键限制为枚举值吗?

打字稿->从Json.net转换字典的内容