Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

แปลง JSON เป็นรูปแบบ JSON อื่นด้วยการเรียกซ้ำใน JavaScript


ภาพรวม

สมมติว่าเรามีอ็อบเจ็กต์ JSON ดังนี้:

const obj = {
  "context": {
    "device": {
      "localeCountryCode": "AX",
      "datetime": "3047-09-29T07:09:52.498Z"
    },
    "currentLocation": {
      "country": "KM",
      "lon": -78789486
    }
  }
};

เราต้องเขียนฟังก์ชันเรียกซ้ำที่แปลงอ็อบเจ็กต์เป็นรูปแบบ "label" - "children"

ผลลัพธ์ที่คาดหวัง

const output = {
  "label": "context",
  "children": [
    {
      "label": "device",
      "children": [
        { "label": "localeCountryCode" },
        { "label": "datetime" }
      ]
    },
    {
      "label": "currentLocation",
      "children": [
        { "label": "country" },
        { "label": "lon" }
      ]
    }
  ]
};

ตัวอย่างโค้ด

const obj = {
  "context": {
    "device": {
      "localeCountryCode": "AX",
      "datetime": "3047-09-29T07:09:52.498Z"
    },
    "currentLocation": {
      "country": "KM",
      "lon": -78789486
    }
  }
};

const transformObject = (obj = {}) => {
  if (obj && typeof obj === 'object') {
    return Object.keys(obj).map((el) => {
      let children = transformObject(obj[el]);
      return children ? {
        label: el,
        children: children
      } : {
        label: el
      };
    });
  }
};

console.log(JSON.stringify(transformObject(obj), undefined, 4));

ผลลัพธ์ในคอนโซล

[
  {
    "label": "context",
    "children": [
      {
        "label": "device",
        "children": [
          { "label": "localeCountryCode" },
          { "label": "datetime" }
        ]
      },
      {
        "label": "currentLocation",
        "children": [
          { "label": "country" },
          { "label": "lon" }
        ]
      }
    ]
  }
]