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)

你可能感兴趣的:(JavaScript 操作JSON对象查找、删除、修改)