如何获得数组对象的键

How to get the key of an array object?

本文关键字:对象 数组 何获得      更新时间:2023-09-26

给定对表单的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的值分配给那个错误字段。

谢谢!

对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

感兴趣

如果不能访问父对象,则无法找到对象的键。我认为在这种情况下,最好的解决方案是对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'}]只需将该对象传递给验证例程。如果可能的话,我会更改服务器代码,以我建议的格式返回错误消息,这样您就不必做额外的工作了。