我应该如何处理看起来像这样的物体

我需要在表单中显示错误。

如果在子项中定义了错误,则可以将错误附加到输入名称表单,这是常见情况(1)。

但是可能发生错误是在json对象的根节点中定义的(2)。
在这种情况下,它应该附加到formElement。

以下代码(3)适用于案例(1)但不适用于案例(2)。

我应该如何修改它以使其在两种情况下都能正常工作?
PS:我使用下划线和jquery。


(1)

var xhrObj_1 = JSON.parse('{ "children":{"points":{"errors":["This value should not be blank."]},"message":[],"recipient_id":{"errors":["This value should not be blank."]}}}'); 

(2)

 var xhrObj_2 = JSON.parse('{ "errors":["This form should not be …."], "children":{"points":{"errors":["This value should not be blank."]},"message":[],"recipient_id":{"errors":["This value should not be blank."]}}}'); 

(3)

 var parser = function (object) { _.each(object, function (xhrObject, name) { console.log(xhrObject) if (xhrObject.errors) { var inputElement = element.find('[name="' + name + '"]'); inputElement.closest('.control-group') .addClass('error'); parserError(xhrObject.errors, inputElement); } else { parser(xhrObject); // it is ok for xhrObj_1 // it fails for xhrObj_2 } }); }; // example with xhrObj_2 which does not work parser({ "errors": ["errro1"], "children": { "points": { "errors": ["This value should not be blank."] }, "message": [], "recipient_id": { "errors": ["This value should not be blank."] } } }); 

你应该在顶层开始递归:

 var xhr = JSON.parse("…"); (function recurse(obj, name) { if (obj.errors) { var inputElement = element.find('[name="' + name + '"]'); inputElement.closest('.control-group').addClass('error'); parserError(obj.errors, inputElement); } if ("children" in obj) for (var prop in obj.children) recurse(obj.children[prop], prop); })(xhr, "top");