Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mensiri dan Menyahseri Peta ES6 dengan JSON.stringify dan JSON.parse?

Bagaimana untuk Mensiri dan Menyahseri Peta ES6 dengan JSON.stringify dan JSON.parse?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-20 13:00:22223semak imbas

How to Serialize and Deserialize ES6 Maps with JSON.stringify and JSON.parse?

Cara Mensiri Peta ES6 untuk Pemprosesan JSON

Apabila membuat penukaran daripada Objek ES6 ke Peta, ketidakupayaan untuk terus JSON.stringify a Peta boleh menjadi penghalang. Artikel ini membincangkan penyelesaian kepada cabaran ini, menggunakan hujah kedua JSON.stringify dan JSON.parse, replacer dan reviver, masing-masing.

Fungsi Pengganti Tersuai dan Reviver

Untuk menambah sokongan untuk Peta, fungsi pengganti tersuai dan menghidupkan semula boleh dibuat. Fungsi ini mengendalikan penukaran kepada dan dari JSON:

function replacer(key, value) {
  if (value instanceof Map) {
    return {
      dataType: 'Map',
      value: Array.from(value.entries()), // or with spread: value: [...value]
    };
  } else {
    return value;
  }
}
function reviver(key, value) {
  if (typeof value === 'object' && value !== null) {
    if (value.dataType === 'Map') {
      return new Map(value.value);
    }
  }
  return value;
}

Penggunaan

Dengan fungsi tersuai yang sedia ada, penyiaran dan penyahserikan Peta menjadi mudah:

const originalValue = new Map([['a', 1]]);
const str = JSON.stringify(originalValue, replacer);
const newValue = JSON.parse(str, reviver);
console.log(originalValue, newValue);

Deep Nesting

Teknik ini meluas ke struktur bersarang dalam yang terdiri daripada Peta, Tatasusunan dan Objek:

const originalValue = [
  new Map([['a', {
    b: {
      c: new Map([['d', 'text']])
    }
  }]])
];
const str = JSON.stringify(originalValue, replacer);
const newValue = JSON.parse(str, reviver);
console.log(originalValue, newValue);

Atas ialah kandungan terperinci Bagaimana untuk Mensiri dan Menyahseri Peta ES6 dengan JSON.stringify dan JSON.parse?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn