Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Chuyển đổi JSON sang định dạng JSON khác bằng đệ quy trong JavaScript

Giả sử chúng ta có đối tượng JSON sau:

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

Chúng ta cần viết hàm JavaScript đệ quy nhận vào đối tượng này. Hàm tách đối tượng trên thành định dạng "label" - "children".

Kết quả mong đợi:

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

Mã thực hiện:

Ví dụ

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

Kết quả

Kết quả in ra console:

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