如何将字符串转换为对象表示法

时间:2016-05-31 15:15:48

标签: javascript json javascript-objects

我正在使用JSON验证程序,该验证程序根据架构检查给定的JSON对象,如果它不匹配则返回错误。我需要做的一件事是添加缺少的属性,但这些可能在结构中非常深。验证器错误以这种格式将缺少的属性的位置返回为字符串:

'data.thing1.thing2.thingN'

我可以删除"数据。"有点容易,但我不知道如何将其余部分翻译成正确的对象符号,无论如何。这是我到目前为止所得到的:

var attributeLineage = newField.split(".");
obj[attributeLineage[0]][attributeLineage[1]] = "";

所以显然这仅在只有两个深度级别时才有效。我需要循环遍历attributeLineage中的值并将它们全部链接在一起,以在任何深度正确构造给定对象中的缺失属性。怎么办呢?

我可能会遗漏一些完全明显的东西,或者说错误的方式,但我不确定如何继续。

1 个答案:

答案 0 :(得分:1)

使用 reduce() 方法获取内部对象的引用,并使用split数组中的last元素更新属性。

var newField = 'data.thing1.thing2.thingN';
// split the string
var attributeLineage = newField.split("."),
  // get last element and remove it from splitted array
  prop = attributeLineage.pop();

var ob = {
  data: {}
};

// get the object reference
var obj = attributeLineage.reduce(function(o, k) {
  // return if nested object is defined 
  // else define and return it
  return o[k] || (o[k] = {}) && o[k];
}, ob);

// update the inner object property
obj[prop] = "hi";

console.log(ob);