Javascript 如何使用递归展平NodeJSON文件

Javascript 如何使用递归展平NodeJSON文件,javascript,node.js,json,recursion,Javascript,Node.js,Json,Recursion,我有一个非常复杂的嵌套json文件,需要使用递归遍历它 我需要的是 将最内层值的值指定给其父键 删除最里面的键和值 删除空对象 我已经尝试了很多方法,但我对javascript世界还不熟悉,无法找到正确的解决方案。 我的json嵌套如下 { "Changes_Only": { "_text": "some value" },

我有一个非常复杂的嵌套json文件,需要使用递归遍历它 我需要的是

  • 将最内层值的值指定给其父键
  • 删除最里面的键和值
  • 删除空对象
  • 我已经尝试了很多方法,但我对javascript世界还不熟悉,无法找到正确的解决方案。 我的json嵌套如下

          {
             "Changes_Only": {
                    "_text": "some value"
                  },
                  "Legal_Employee_Id": {},
                "EmployeeData": {
                  "OBJECT_ACTION_ID": {
                   "_text": "some value"
                  },
                  "Employee": {
                    "PersonID": {
                      "_text": "some value"
                    },
                    "PersonID_OLD": {},
                    "PersonNumber": {
                      "_text": "some value"
                    },
                    "PersonNumber_OLD": {},
                    "StartDate": {
                      "_text": "some value"
                    },
                    "StartDate_OLD": {},
                    "PersonType": {
                      "_text": "some value"
                    },
                    "PersonType_OLD": {},
                    "DateofBirth": {
                      "_text": "some value"
                    },
                    "DateofBirth_OLD": {},
                    "HireDate": {
                      "_text": "some value"
                    },
                    "HireDate_OLD": {},
                    "WorkEmail": {
                      "_text": "some value"
                    },
                    "WorkEmail_OLD": {},
                    "FirstName": {
                      "_text": "some value"
                    },
                    "FirstName_OLD": {},
                    "LastName": {
                      "_text": "some value"
                    },
                    "LastName_OLD": {}
                  },
                  "NationalIDHT": {
                    "NtionalIDData": {
                      "NationalIDValues": {
                        "NationalType": {
                          "_text": "some value"
                        },
                        "NationalIDNumber": {
                          "_text": "some value"
                        }
                      }
                    }
                  },
                  "AssignmentHT": {
                    "AssignmentData": {
                      "Assignment": {
                        "PersonNumber": {
                          "_text": "some value"
                        },
                        "PersonNumber_OLD": {},
                        "WorkerNumber": {
                          "_text": "some value"
                        },
                        "WorkerNumber_OLD": {},
                        "Gender": {
                          "_text": "some value"
                        },
                        "Gender_OLD": {},
                        "ActionName": {
                          "_text": "some value"
                        },
                        "ActionName_OLD": {},
                        "HourlySalaried": {
                          "_text": "some value"
                        },
                        "HourlySalaried_OLD": {},
                        "SalaryBasis": {
                          "_text": "some value"
                        },
                        "SalaryBasis_OLD": {},
                        "ManagerPersonNumber": {
                          "_text": "some value"
                        },
                        "ManagerPersonNumber_OLD": {},
                        "ManagerDisplayName": {
                          "_text": "some value"
                        },
                        "ManagerDisplayName_OLD": {},
                        "AssignmentCategory": {
                          "_text": "some value"
                        },
                        "AssignmentCategory_OLD": {},
                        "AsgState": {
                          "_text": "some value"
                        },
                        "AsgState_OLD": {},
                        "JobCode": {
                          "_text": "some value"
                        },
                        "JobCode_OLD": {},
                        "Desgination": {
                          "_text": "some value"
                        },
                        "Desgination_OLD": {},
                        "Grade": {
                          "_text": "some value"
                        },
                        "Grade_OLD": {},
                        "Levele-Grade": {
                          "_text": "some value"
                        },
                        "Levele-Grade_OLD": {},
                        "Department": {
                          "_text": "some value"
                        },
                        "Department_OLD": {},
                        "EmployeeType": {
                          "_text": "some value"
                        },
                        "EmployeeType_OLD": {},
                        "BusinessUnit": {
                          "_text":"some value"
                        },
                        "BusinessUnit_OLD": {},
                        "BaseLocation": {
                          "_text":"some value"
                        },
                        "BaseLocation_OLD": {},
                        "PhysicalWorkAddress": {
                          "_text":"some value"
                        }
                        }
                      }
                    }
                  }
                }
    
    下面我需要的json也可以帮助我删除空对象

    {
             "Changes_Only":  "some value",
              
                "EmployeeData": {
                  "OBJECT_ACTION_ID":  "some value",
                  "Employee": {
                    "PersonID": "some value",
                    "PersonNumber":  "some value",
                    "StartDate":  "some value",
                    "PersonType":  "some value",
                    "DateofBirth":  "some value",
                    "HireDate":  "some value",
                    "WorkEmail":  "some value",
                    "FirstName":  "some value",
                    "LastName":  "some value"
                  },
                  "NationalIDHT": {
                    "NtionalIDData": {
                      "NationalIDValues": {
                        "NationalType":  "some value",
                        "NationalIDNumber":  "some value"
                      }
                    }
                  },
                  "AssignmentHT": {
                    "AssignmentData": {
                      "Assignment": {
                        "PersonNumber": "some value",
                        "WorkerNumber": "some value",
                        "Gender":  "some value",
                        "ActionName": "some value",
                        "HourlySalaried": "some value",
                        "SalaryBasis": "some value",
                        "ManagerPersonNumber": "some value",
                        "ManagerDisplayName":  "some value",
                        "AssignmentCategory":  "some value",
                        "AsgState":  "some value",
                        "JobCode":  "some value",
                        "Desgination":  "some value",
                        "Grade":  "some value",
                        "Levele-Grade":  "some value",
                        "Department":  "some value",
                        "EmployeeType":  "some value",
                        "BusinessUnit":  "some value",
                        "BaseLocation":  "some value",
                        "PhysicalWorkAddress": "some value"
                        }
                      }
                    }
                  }
                }
             
    

    实际上,这里不需要JSON解析——可以使用正则表达式。用“some value”替换“{u text”:“some value”}就可以了

    像这样:

    str.replace(/{\s*"_text":\s*("[^"]*")\s*}/, "$1")
    
    我会照顾你的

    “PersonNumber”:{“\u text”:“some value”},


    将清除空属性

    试试这个我只是在纠正@Konstantin Pribluda

    const r = { ...} // Input JSON
    JSON.parse(JSON.stringify(r).replace(/{\s*"_text":\s*("[^"]*")\s*}/g, "$1").replace(/"[^"]*"\s*:\s*{},/g,""))
    

    其次,替换为空{}

    ,这里有一个答案,它不依赖于字符串操作,而是使用对象扫描

    字符串操作有它的位置,但在这里它可能会导致问题(例如,修剪在其属性被修剪后变为空的对象)。所以这个答案应该比那些使用字符串操作的答案更受欢迎

    //const objectScan=require('object-scan');
    const input={“仅更改”:{“文本”:“某些值”},“法律雇员Id”:{},“雇员数据”:{“对象行动Id”:{“文本”:“某些值”},“雇员”:{“PersonID”:{“PersonID”:{“PersonID”:“某些值”},“PersonID”OLD”:{“PersonNumber”:{“文本”:“某些值”},“PersonNumber”OLD{},“StartDate”:{type”{,“PersonType_OLD”:{},“DateofBirth”:{{},“DateofBirth_OLD”:{},“HireDate”:{{},“HireDate_OLD”:{},“WorkEmail”:{{},“WorkEmail_OLD”:{},“FirstName”:{{},“FirstName”:{{{},“LastName”:{{{}文本”:“some value”},“LastName{},“NationalOfIdValued”:{}”NationalType:{U-text:{some value:},“NationalNumber:{U-text:“some value”}}}}},“AssignmentHT:{”AssignmentData:{“Assignment:{”PersonNumber:{U-text:“some value”},“PersonNumber:{OLD:{},“WorkerNumber:{U-text:{”WorkerNumber:{},“WorkerNumber:{OLD:{},”性别:{U-text:“some value:{”性别:{OLD:{ActionName:{ActionText:{ActionName:{“:{},”HourlySalaried:{{{U text:“some value”},“HourlySalaried”{},“salarybase:{{U text:“some value”},“salarybase:“some value”},“ManagerPersonNumber:{{U text:“some value”},“ManagerPersonNumber”{},“ManagerDisplayName:{{U text:{some value”},“ManagerDisplayName”{},“AssignmentCategory:{text:{,“AsgState:{{U text:{U OLD:{},”AsgState:{},“JobCode:{U text:“some value”},“JobCode:{}”,Desgination:{{U text:“some value”},“Desgination:{U OLD:{},”Grade:{{U text:“some value”},“Grade:{},”Levele Grade:{{E Grade:{E:{U text:“some value”},“Levele-Grade:{lade:{Department:{Department:{Department:{Department:{value”},Department:{Department:{some value“}”,EmployeeType_OLD:{},“BusinessUnit:{{u text:“some value”},“BusinessUnit_OLD:{},“BaseLocation:{u text:“some value”},“BaseLocation_OLD:{}”,PhysicalWorkAddress:{{u text:“some value”};
    常量重写=(数据)=>{
    objectScan(['**']{
    breakFn:({value,gparent,gproperty})=>{
    如果(值的类型=='string'){
    gparent[gproperty]=值;
    }
    },
    filterFn:({value,parent,property})=>{
    if(对象的值instanceof&&Object.keys(值).length==0){
    删除父项[属性];
    }
    }
    })(数据);
    };
    console.log(重写(输入));
    //=>未定义
    控制台日志(输入);
    /* => {
    仅更改“某些值”,
    雇员数据:{
    对象\u操作\u ID:“某些值”,
    雇员:{
    PersonID:“某些值”,
    PersonNumber:“某些值”,
    StartDate:“某个值”,
    PersonType:“某些值”,
    出生日期:“某个值”,
    雇佣:“一些价值”,
    工作电子邮件:“一些价值”,
    名字:“某个值”,
    LastName:“某些值”
    },
    DHT:{
    Ntiodata:{
    国家价值:{
    NationalType:“某些值”,
    国有数字:“一些价值”
    }
    }
    },
    转让日期:{
    分配数据:{
    任务:{
    PersonNumber:“某些值”,
    WorkerNumber:“某些值”,
    性别:'一些价值',
    ActionName:“某些值”,
    Hourlysalarized:“一些价值”,
    工资基础:“一些价值”,
    ManagerPersonNumber:“某些值”,
    ManagerDisplayName:“某些值”,
    AssignmentCategory:“某些值”,
    AsgState:“某些值”,
    作业代码:“某些值”,
    设计:“一些价值”,
    等级:'某些值',
    “等级”:“某些值”,
    部门:'一些价值',
    EmployeeType:“某些值”,
    业务单元:“一些价值”,
    BaseLocation:“某些值”,
    PhysicalWorkAddress:“某些值”
    }
    }
    }
    }
    }
    */
    。作为控制台包装{最大高度:100%!重要;顶部:0}

    我已经编辑了它谢谢@Biswabhusanc你能在这里检查验证吗谢谢@BiswaBhusan我现在已经做了它在JSON字符串上没有做任何更改它正在更改,但在我的answeradd/mg正则表达式末尾只更正了一次
    const r = { ...} // Input JSON
    JSON.parse(JSON.stringify(r).replace(/{\s*"_text":\s*("[^"]*")\s*}/g, "$1").replace(/"[^"]*"\s*:\s*{},/g,""))