如何使用字符串来查找和更新对象

时间:2013-03-17 00:55:59

标签: javascript json

在javascript中,我正在加载一个json对象,并尝试更新其中的值。 html中的元素具有与其路径匹配的id,例如:“values.one”元素:

  

{ “值”:{ “一个”: “VAL1”, “二”: “val2的”}, “OtherStuff”: “不管”}

与此元素有关:

<input id="values_one" type="text">val1</div>

当这个元素失去焦点时,我想获取“#values_one”的值(使用jQuery)并设置使用我的json对象中的任何值。我已经弄清楚如何从现有的json对象中获取值(请参阅下面我的可怕代码),但我最终只得到了值,因此设置它不会影响json对象。关于如何做到这一点的任何建议(假设我不知道失去焦点的元素是“values_one”,“values_two”,还是可能映射到json对象的任何其他元素)?

这是我此时的代码(不起作用),但很高兴废弃它以实际工作:

var saveEdit = function() {
  var data = getJson();
  pathElements = $(this).attr('id').split('_'); 
  length = pathElements.length;
  var path = data[pathElements[0]];
  index = 1;
  while (index < length) {
      path = path[pathElements[index]];
      length -= 1;
  }
  path = $(this).text(); //resets "path", but not data.values.one
  $(this).unbind();
}

2 个答案:

答案 0 :(得分:1)

循环一个比长度短的数据,以便获得包含与最后一个标识符匹配的属性的元素:

var path = data;
for (index = 0; index < length - 1; index++) {
  path = path[pathElements[index]];
}
path[pathElements[length - 1]] = $(this).text();

答案 1 :(得分:1)

首先,没有“JSON对象”这样的东西。是的,我是迂腐的,但你应该有一个“JSON字符串”或“Javascript对象”。

看起来您正在尝试通过事件修改 JSON字符串,而不仅仅是让对象本身可用于引用和修改。为什么要把它保存在一个字符串中呢?当您准备好导出数据(可能保存到数据库),然后只需stringify();对象并继续使用。

请查看以下jsFiddle,了解可以构建的工作实现:http://jsfiddle.net/julianlam/WRZPF/