1. 程式人生 > >JavaScript 操作JSON物件查詢、刪除、修改

JavaScript 操作JSON物件查詢、刪除、修改

近日根據公司需求用js對json的各種處理,完成後整理如下(全遞迴處理方法,如有更好的見解希望告知):

  1. 對JSON的查詢
  /**
   * 
   * 獲取JSON對應葉子節點的資料
   */
  function getJSONData(keys, data ){
    let [key, ...child] = keys
    if (keys.length == 1) {
      // delete datas[key] 只能刪除物件,刪除陣列時不能修改陣列的長度
      return datas[key]
    } else {
      let {
        [key]: data
      } = datas
      delJSONData(child, data)
    }
  }

2、刪除JSON物件中的某個資料

  /**
   * datas 為json物件,keys為json刪除的key的陣列
   */
  function delJSONData(keys,type, datas) {
    let [key, ...child] = keys
    if (keys.length == 1) {
       if(type=='array'){
           datas.splice(key, 1) // 若刪除陣列元素用,刪除物件用delete
       }else{
           delete datas[key] // 只能刪除物件,刪除陣列時不能修改陣列的長度
} } else { let { [key]: data } = datas delJSONData(child,type, data) } }

3、增加和修改JSON物件中的某個資料節點

  /**
   * 修改JSON物件中的某個資料
   */
  function setJSONData(keys, value, datas) {
    let [key, ...child] = keys
    if (keys.length == 1) {
      datas[key] = value
    } else
{ let { [key]: data } = datas setJSONData(child, value, data) } }

例子

   let json ={
        "teacher": [
            {
               "name": "jordan",
                "sex": "m",
                "age": "40"
            },
            {
                "name": "bryant",
                "sex": "m",
                "age": "28"
            },
            {
                "name": "McGrady",
                "sex": "m",
                "age": "27"
            }
        ]
    }

    let pareType = 'array'
    let keystr = 'teacher.0.name'  //teacher為第一個key,0為teacher陣列的第一個選項,name為想要刪除的物件名
    //獲取 name = jordan 
    let name = getJSONData(keystr.split('.'),json)
    console.log(name)
    //刪除 name = jordan物件
    delJSONData(keystr.split('.'),pareType,json)
    console.log(json)

    let name = "123"
    setJSONData(keystr.split('.'),name,json) //修改成功
    console.log(json)