将带有字典的打字稿类对象转换为 JSON 字符串

时间:2021-01-04 16:08:49

标签: json typescript dictionary mapping stringify

我正在寻找一种方法将我的带有字典的 typescript 类转换为不带括号的 JSON 对象。

这是我的课

export class MediaTagRequest {
    tags: Map<string, string>; 
    constructor(tags: Map<string, string>) {
      this.tags = tags;
    }
}

我的实例化

   let tags = new Map<string, string>();
   tags.set("city", "Karachi");  

   let mediatagRequest = new MediaTagRequest(tags);
   const headers = { 'content-type': 'application/json'}   
   const body = JSON.stringify(Object.keys(mediatagRequest.tags.entries()));

我当前的输出:

[["city","Karachi"]]

我想要的输出:

{
    "tags": {
        "city": "Karachi"
    }
}

谁能帮帮我,谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用 Map#entriesObject.fromEntries 直接将地图转换为对象。

这是一个例子:

const m = new Map();

m.set("foo", "hello");
m.set("bar", "world");

const obj = Object.fromEntries(m.entries());

console.log(obj);

在转换整个对象时,您可以进一步利用 the replacer parameter of JSON.stringify 直接执行此操作:

function mapReplacer(key: string | number | Symbol, value: any) {
  if (value instanceof Map) {
    return Object.fromEntries(value.entries());
  }
  
  return value;
}

class MediaTagRequest {
    tags: Map<string, string>; 
    constructor(tags: Map<string, string>) {
      this.tags = tags;
    }
}

let tags = new Map<string, string>();
tags.set("city", "Karachi");  

let mediatagRequest = new MediaTagRequest(tags);

console.log(JSON.stringify(mediatagRequest, mapReplacer))

Playground Link

JavaScript 演示:

function mapReplacer(key, value) {
  if (value instanceof Map) {
    return Object.fromEntries(value.entries());
  }
  
  return value;
}

class MediaTagRequest { 
    constructor(tags) {
      this.tags = tags;
    }
}

let tags = new Map();
tags.set("city", "Karachi");  

let mediatagRequest = new MediaTagRequest(tags);

console.log(JSON.stringify(mediatagRequest, mapReplacer))

答案 1 :(得分:1)

您可以使用其中任何一个来创建 length,然后使用它创建响应正文

选项 1

object

选项 2

let jsonObject = {};
tags.forEach((value, key) => {  
    jsonObject[key] = value;
});

选项 3

let jsonObject = {};
for (let entry of tags.entries()) {
    jsonObject[entry[0]] = entry[1];
}

创建响应正文

let jsonObject = {};
for (let key of tags.keys()) {  
    jsonObject[key] = value;          
}