如何获取数组对象的键?

时间:2011-04-21 16:20:47

标签: javascript arrays object dojo

鉴于JSON响应表单,我需要解析JSON元素以查找错误消息及其关联元素,错误与之相关。

数据以JSON格式返回,错误消息为最后一个变量对,如下所示:

"invalid":[{"field1":"Field 1 is required"}]

这会导致每个错误都有一个对象/数组,显示项目的名称(键)以及该字段的相关错误。鉴于我的错误处理表单不知道键名是什么,我将如何获得该对象/数组的键和值?

我在这个项目上使用dojo并且我根本不熟悉它,所以我一直在尝试使用dojo函数,如果存在可以处理它的东西。目前我在哪里:

var retObj = dojo.fromJson(ioargs.xhr.responseText);

dojo.forEach(retObj.invalid, function(entry,i){ 
    console.debug(entry);
});

控制台输出是:

Object { field1="Field 1 is required"}

我的目标是取出值“field1”,以便知道将此错误分配给哪个输入字段,然后将field1的值分配给该错误字段。

谢谢!

2 个答案:

答案 0 :(得分:1)

Dunno关于Dojo的一件事,但你正在寻找一个非常基本的for in循环。

var retObj = dojo.fromJson(ioargs.xhr.responseText),
    invalids = retObj.invalid[0],
    res = {}; //here will be your final key=>value

for (var key in invalids) {
    res[key] = invalids[key];
}

http://jsfiddle.net/DgXkq/

您可能也对https://stackoverflow.com/search?q=%5Bjavascript%5Dparsing+json

感兴趣

答案 1 :(得分:0)

如果您无权访问父对象,则无法找到对象的键。我认为在这种情况下最好的解决方案是按摩JSON以将更有意义的信息传递给验证器,即具有两个属性fieldName和errorMessage的对象。

// Returns the name of an object's first key 
function getKeyName(obj) {
   for (var prop in obj) {
       return prop;
   }
}

// This is the response from the server
var response = { "invalid":[{"field1":"Field 1 is required"}] };

// This is going to be the massaged array that
// contains more meaningful information.
var invalids = [];
for (var i=0; i < response.invalid.length; i++) {
  var obj = response.invalid[i];
  var key = getKeyName(obj);
  invalids.push({fieldName: key, errorMessage: obj[key]})
}

现在invalids包含一组更有意义的错误消息对象,例如 invalids = [{fieldName: 'field1', errorMessage: 'Field 1 is required'}] 只需将该对象传递给验证例程即可。如果可能的话,我会更改服务器代码,以我建议的格式返回错误消息,这样你就不需要做额外的工作了。