Json - 仅删除键并将值赋给父键

时间:2017-03-15 18:29:53

标签: javascript json

{"empid":{"string":"31564604"},"joindate":{"date":2017-01-01}}

使用Java / Javscript将上面的json转换为以下格式。 juzt需要删除数据类型。

{"empid":"31564604","joindate":2017-01-01}

6 个答案:

答案 0 :(得分:0)

使用Javascript,将其转换为对象,然后通过简单地迭代所有属性进行更新,最后对该对象进行字符串化。

var json = '{"empid":{"string":"31564604"},"joindate":{"date":"2017-01-01"}}';

// parse the string
var obj = JSON.parse(json);
// get all keys and iterate over them
Object.keys(obj).forEach(function(k) {
  // update the property with the nested object property value
  obj[k] = obj[k][Object.keys(obj[k])[0]];
})

// convert back to JSON
console.log(JSON.stringify(obj));

UPDATE:对于嵌套对象,请使用递归方法。

var json = '{"empid":{"string":"31564604"},"joindate":{"date":"2017-01-01"},"a":{"array":[{"number":1}]},"level1":{"object":{"level2":{"string":"abc"}}}}';

// parse the string
var object = JSON.parse(json);
updateObj(object);

function updateObj(obj) {
  // get all keys and iterate over them
  Object.keys(obj).forEach(function(k) {
    // update the property with the nested object property value
    obj[k] = obj[k][Object.keys(obj[k])[0]];
    // recursively call the faction if the element is object
    typeof obj[k] == 'object' && updateObj(obj[k]);
  })
}

// convert back to JSON
console.log(JSON.stringify(object));

答案 1 :(得分:0)

另一种解决方案,使用Array#reduce

var obj = { empid: { string: 31564604 }, joindate: { date: '2017-01-01' }, nested: { nextLevel: { boolean: 1 } } },

    newObj = Object.keys(obj).reduce(function(s, a) {
      s[a] = obj[a][Object.keys(obj[a])]
      return s;
    }, {});

    console.log(newObj);

答案 2 :(得分:0)

您可以使用对象的递归方法来获取正确的类型。



function convert(object) {
    var dataTypes = { boolean: true, string: true, date: true };

    Object.keys(object).forEach(function (k) {
        var key;
        if (object[k] && typeof object[k] === 'object') {
            key = Object.keys(object[k])[0];
            if (key in dataTypes) {
                object[k] = object[k][key];
            } else {
                convert(object[k]);
            }
        }
    });
}

var object = { empid: { string: '31564604' }, joindate: { date: '2017-01-01' }, nested: { nextLevel: { boolean: true } } };

convert(object);
console.log(object);




答案 3 :(得分:0)

如果仅为最内层元素指定数据类型而不为数组或对象指定数据类型,则执行此操作。

var json = '{"empid":{"string":"31564604"},"joindate":{"date":"2017-01-01"},"a":[{"number":1}],"level1":{"level2":{"string":"abc"}}}';

// parse the string
var object = JSON.parse(json);
updateObj(object);

function updateObj(obj) {
  // get all keys and iterate over them
  Object.keys(obj).forEach(function(k) {
    // get the nested object property
    var key = Object.keys(obj[k])[0];
    // update only if nested property is object
    typeof obj[k][key] != 'object' && (obj[k] = obj[k][key]);
    // recursively call the faction if the element is object
    typeof obj[k] == 'object' && updateObj(obj[k]);
  })
}

// convert back to JSON
console.log(JSON.stringify(object));

答案 4 :(得分:0)

鉴于数据:

const oldJson = {"empid":{"string":"31564604"},"joindate":{"date":"2017-01-01"}};

ES6:

let newJson = {};
Object.keys(oldJson).forEach(key => {
  newJson[key] = oldJson[key];
});

ES5:

var newJson = {};
Object.keys(oldJson).forEach(function(key) {
  newJson[key] = oldJson[key];
});

答案 5 :(得分:0)

我的解决方案:仅限ES6功能,因此您必须使用Babel

(function(){
  const oldJson = {"empid":{"string":"31564604"},"joindate":{"date":"2017-01-01"}};
  const newJson = Object.values( oldJson ).reduce( (acc, value) => Object.assign(acc, value), {})
  console.log(newJson);
})();

文档:

  1. Object.values
  2. Object.assign
  3. Array.reduce