JavaScript 操作JSON对象查找、删除、修改

本文介绍了一种使用JavaScript处理JSON数据的方法,包括递归查找、删除、增加和修改JSON对象中的数据节点。通过具体实例展示了如何实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日根据公司需求用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)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值