繁体   English   中英

修改json对象并保存

[英]modify json object and save it

我确实有一个json数组对象。 我需要对其进行修改,然后将修改后的版本保存在变量中。

json对象

var json = [ 
{ 
  "Name": "March-2016", 
  "Elements": [ 
    { 
      "Name": "aa", 
      "Elements": [ 
        { 
         "Name": "ss", 
          "Data": { 
            "Test1": [ 
              22
            ], 
            "Test2": [ 
              33 
            ],
            "Test3": [ 
              44
            ],
            "Test4": [ 
              55
            ]
          } 
        },
        { 
          "Name": "ssee", 
           "Data": { 
             "Test12": [ 
               222
             ], 
             "Test22": [ 
               3322 
             ],
             "Test32": [ 
               445
             ],
             "Test42": [ 
               553
             ]
           } 
         }  
      ] 
    } 
  ] 
} 

]。

需要修改为

 var json = [ 
{ 
  "Name": "March-2016", 
  "Elements": [ 
    { 
      "Name": "aa", 
      "Elements": [ 
        { 
         "category": "ss", 
            "Test1": 22, 
            "Test2": 33 ,
            "Test3":44,
            "Test4": 55 
        },
        { 
          "category": "ssee", 
          "Test12": 222, 
          "Test22": 3322 ,
          "Test32":445,
          "Test42": 553 
         }  
      ] 
    } 
  ] 
} 

]。

我有这种方法,但它不能完成工作

var saveJson = function(arr) {
var nameValuePairs = [];
for (var i = 0, len = arr.length; i < len; i++) {
  var item = arr[i];
  if (item.Data) {
    var newvar = {
       category : item.Name
     }
     newvar[Object.keys(item.Data)] = Object.values(item.Data);
     item = newvar

  }

  if (item.Elements) {
    nameValuePairs = nameValuePairs.concat(saveJson(item.Elements));
  }
}
return arr;
};

我需要这种转换是动态的,以确保我将得到比发布的json大的json

很抱歉造成您的困惑,在此先感谢您。

原始对象确实是一团糟,但是仍然只需要逐步检查并提取所需的值即可。 这将改变json对象的位置:

json.forEach(item => {
  item.Elements.forEach(Outer_El => {
      Outer_El.Elements = Outer_El.Elements.map(item =>{
          let obj =  {category: item.Name}
          Object.keys(item.Data).forEach(key => {
              obj[key] = item.Data[key][0]
          })
          return obj
      })
   })
})

json现在应该看起来像:

[{
    "Name":"March-2016",
    "Elements":[
        {
            "Name":"aa",
            "Elements":[
                {
                    "category":"ss",
                    "Test1":22,
                    "Test2":33,
                    "Test3":44,
                    "Test4":55
                },
                {
                    "category":"ssee",
                    "Test1e":224,
                    "Test2e":334,
                    "Test3e":443,
                    "Test4e":554
                }
            ]
        }
    ]
}]

您可以使用解构分配从对象获取特定的属性值

{
  let {Name:categories, Data:{Test:[Test]}} = json[0].Elements[0].Elements[0];
  json[0].Elements[0].Elements[0] = {categories, Test};
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM