Преобразование объекта в JSON

#javascript #dictionary

#javascript #словарь

Вопрос:

Я пытаюсь преобразовать следующие переменные в JSON

 class RHypervisor extends React.Component {
  constructor(props) {
    super(props);

    this.label = "hv01"

    this.state = {
      hypervisor_type: "xen",
      cpu_units: 2250,
      hypervisor_group_label: "kvm_hvz_1",
      hardware_configs: {
        vsphere: {}
    }
  }
}

var myMap = new Map().set(this.label, this.state)

console.log(myMap)
 

Код работает нормально, но я не могу получить JSON, который мне нужен, в следующем формате:

 {
   "hv01": {
      "cpu_units": "2250",
      "hypervisor_group_label": "kvm_hvz_1",
      "hardware_configs": {
        "vsphere": {...}
      }
   }
}
 

Я попал в консоль:

 [
  "hv01",
    {
      "hypervisor_type": "xen",
      "cpu_units": 2250,
      "hypervisor_group_label": "kvm_hvz_1",
      "hardware_configs": {
        "vsphere": {...}
      }
    }
  }
]
 

Как я могу получить ключ верхнего уровня как this.label и следующий объект this.state

PS. Я совершенно новичок в JS, работаю с этим всего несколько дней… пожалуйста, помогите мне в этом вопросе

Комментарии:

1. Вы понимаете, что JSON и Map — это 2 разные вещи, верно? Под JSON обычно подразумевается строка, которая может быть десериализована в JS.

Ответ №1:

Попробуйте использовать Map.entries() и Object.fromEntries() :

 const myMap = new Map();
myMap.set("hv01", {
  hypervisor_type: "xen",
  cpu_units: 2250,
  hypervisor_group_label: "kvm_hvz_1",
  hardware_configs: {
    vsphere: {}
  }
});

console.log(Object.fromEntries([...myMap.entries()])); 

Объяснение:

[...myMap.entries()] возвращает массив пар ключ-значение ( [["hv01", { ... }]] ) и Object.fromEntries() создает новый объект с этими парами ключ-значение.