基于 .(dot) 的嵌套对象

我有这样的对象


    var RecuiterInfo = {}

    RecruiterInfo.Quote: "1"

    RecruiterInfo.CompanyName: "Imperial Innovations",

    RecruiterInfo.OrganizationSize: "2",

    RecruiterInfo.Person.CitizanZenship: null,

    RecruiterInfo.Person.DOB: "Farkhonda@hotmail.com",

    RecruiterInfo.Person.Email: "Farkhonda",

    RecruiterInfo.Person.FirstName: "FaiZi",

    RecruiterInfo.Person.Gender: "4456565656"

    RecruiterInfo.Person.LastName: "4456565656",

    RecruiterInfo.Person.PhoneNo: "4456565656",

    RecruiterInfo.Person.UserId.UserName: "MTIzNDU2",

    RecruiterInfo.Person.UserId.Password: null

我想将此对象转换为这种特定格式


        {

      "QueryObjectID":"RecruiterInfo",

      "Values": [

        {

          "AppFieldID": "Person",

          "Value": [

            {

              "AppFieldID": "CitizanZenship",

              "Value": "1"

            },

            {

              "AppFieldID": "DOB",

              "Value": "01/01/2019"

            },

            {

              "AppFieldID": "Email",

              "Value": "test1@test.com"

            },

            {

              "AppFieldID": "FirstName",

              "Value": "test"

            },

            {

              "AppFieldID": "Gender",

              "Value": "1"

            },

            {

              "AppFieldID": "LastName",

              "Value": "test last"

            },

            {

              "AppFieldID": "PhoneNo",

              "Value": "7897897895"

            },

            {

              "AppFieldID": "UserId",

              "Value": [

                {

                  "AppFieldID": "UserName",

                  "Value": "test1@test.com"

                },

                {

                  "AppFieldID": "Password",

                  "Value": "123456"

                }

              ]

            }

          ]

        },


但它应该是通用/动态的(我不想要任何静态的东西,因为在功能中会有多个点/或嵌套对象)我认为循环将基于.(点),它会嵌套不确定


谁能帮我这个json转换


三国纷争
浏览 179回答 2
2回答

Qyouu

您可以递归地执行此操作。const convert = (obj) => {  if (obj === null) return null  if (typeof obj !== 'object') return obj  return Object.entries(obj)    .reduce((acc, [key, value]) => acc.concat({      AppFieldId: key,      Value: convert(value), // Recursive call    }), [])}console.log(JSON.stringify(convert(RecruiterInfo), null, 2))这并不完全像你想要的那样,但你首先需要静态的东西。[  {    "AppFieldId": "Quote",    "Value": "1"  },  {    "AppFieldId": "CompanyName",    "Value": "Imperial Innovations"  },  {    "AppFieldId": "OrganizationSize",    "Value": "2"  },  {    "AppFieldId": "Person",    "Value": [      {        "AppFieldId": "CitizanZenship",        "Value": null      },      {        "AppFieldId": "DOB",        "Value": "Farkhonda@hotmail.com"      },      {        "AppFieldId": "Email",        "Value": "Farkhonda"      },      {        "AppFieldId": "FirstName",        "Value": "FaiZi"      },      {        "AppFieldId": "Gender",        "Value": "4456565656"      },      {        "AppFieldId": "LastName",        "Value": "4456565656"      },      {        "AppFieldId": "PhoneNo",        "Value": "4456565656"      },      {        "AppFieldId": "UserId",        "Value": [          {            "AppFieldId": "UserName",            "Value": "MTIzNDU2"          },          {            "AppFieldId": "Password",            "Value": null          }        ]      }    ]  }]

幕布斯7119047

您可以采用迭代方法。var data = { 'RecruiterInfo.Quote': "1", 'RecruiterInfo.CompanyName': "Imperial Innovations", 'RecruiterInfo.OrganizationSize': "2", 'RecruiterInfo.Person.CitizanZenship': null, 'RecruiterInfo.Person.DOB': "Farkhonda@hotmail.com", 'RecruiterInfo.Person.Email': "Farkhonda", 'RecruiterInfo.Person.FirstName': "FaiZi", 'RecruiterInfo.Person.Gender': "4456565656", 'RecruiterInfo.Person.LastName': "4456565656", 'RecruiterInfo.Person.PhoneNo': "4456565656", 'RecruiterInfo.Person.UserId.UserName': "MTIzNDU2", 'RecruiterInfo.Person.UserId.Password': null },    result = Object.entries(data).reduce((r, [s, v]) => {        var path = s.split('.'),            last = path.pop();        path            .reduce((o, k, i) => {                var temp = o.find(q => q[i ? 'AppFieldID' : 'QueryObjectID'] === k);                if (!temp) o.push(temp = i ? { AppFieldID: k, Value: [] } : { QueryObjectID: k, Values: [] });                return temp[i ? 'Value' : 'Values'];            }, r)            .push({ AppFieldID: last, Value: v });        return r;    }, []);console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript