如何提取这个json?

时间:2011-10-17 23:07:13

标签: javascript jquery json

我有这样的结果

{
    "Errors" : {
        "Failure" : {
            "ShowAsPopup"  : true,
            "ErrorMessage" :"Some Message.",
            "PopupTitle"   : null
        }
    },
    "IsValid" : false,
    "WarningMessage" : null,
    "SuccessMessage" : null
}

现在如果我Errors.Failure.ShowAsPopup我得到一个值。期待什么。但是我想使用索引(如果可能的话)

我试过

Errors[0].Failure.ShowAsPopup但这只是未定义。理想我想让它像错误[0]。[0]。显示AsPopup,我不必指定“失败”但我可能不得不重新考虑那部分。

我想要一种通用的方法来处理我的错误。看到一些错误需要弹出窗口,有些只是验证错误。所以现在我把它们都硬编了,我正试图摆脱它。我只是检查该错误是否需要弹出窗口。

所以而不是

if(response.Errors.Failure) { // alert('hi')};
else if(response.Errors.Failure2 {// alert('hi2')}

等等我只有一个if语句可以进行检查。

6 个答案:

答案 0 :(得分:3)

您的代码和数据必须匹配。如果数据是这样的:

{"Errors":{"Failure":{"ShowAsPopup":true,"ErrorMessage":"Some Message.","PopupTitle":null}},"IsValid":false,"WarningMessage":null,"SuccessMessage":null}

以多行形式显示如下:

var data = {
    "Errors": {
        "Failure": {
            "ShowAsPopup":true, 
            "ErrorMessage":"Some Message.",
            "PopupTitle":null
        }
    },
    "IsValid":false,
    "WarningMessage":null,
    "SuccessMessage":null
}

然后,您必须使用代码来匹配您的数据,在本例中为Errors.Failure.ShowAsPopup。由于数据是对象形式,因此必须使用对象语法来读取它。数组和对象不可互换。如果您想使用Array语法来读取数据,那么数据将需要是一个不同的论坛。

您可以编写如下通用错误函数:

if (!data.IsValid) {
    handleError(data);
}

function handleError(info) {
    if (info.Errors ) {
        if (info.Errors.Failure) {
            if (info.Errors.Failure.ShowAsPopup) {
                // show a popup error here using info.Errors.Failure.ErrorMessage
            }
        } else if (/* other types of errors here */) {
            // handle other types of errors here
        }
    }
}

答案 1 :(得分:1)

// check if any errors at all    
if (response.Errors instanceof Object && (response.Errors !== {}))
{ 
    $.each(response.Errors, function(index, error){
        // for your example, index will be "Failure", error will be the Object inside
        if (error.ShowAsPopup) {
            // do your popup thing
        }
        else
        {
            // do whatever else
        }
    });
}

答案 2 :(得分:0)

Errors.Failure.ShowAsPopup = Errors[0][0] = errors[0].ShowAsPopup

答案 3 :(得分:0)

花括号{}表示结构不是数组。所以我认为这应该有效:

response["Errors"]["Failure"]["ShowAsPopup"]

答案 4 :(得分:0)

您应该做的是以下任何一种情况。首先,你可以简单地遍历错误对象,如下所示:

for (var errorName in response.Errors) {
    var error = response.errors[errorName];
    alert(errorName.ErrorMessage);
}

这里发生的是response.Errors对象的每个属性都在循环。

另一种选择是将错误作为数组返回:

{ "Errors": [{"ShowAsPopup": true, "ErrorMessage": "Some message"}] }

无论哪种方式都能很好地运作。

答案 5 :(得分:0)

您可以创建一个JSON对象数组。

var errors = [
        {"Failure": {
            "ShowAsPopup":true,
            "ErrorMessage":"Some Message.",
            "PopupTitle":"Error Message #1"
            },
        "IsValid":false,
        "WarningMessage":null,
        "SuccessMessage":null
        }, 
        {"Failure": {
            "ShowAsPopup":true,
            "ErrorMessage":"Some Other Message.",
            "PopupTitle":"Error Message #2"
            },
        "IsValid":false,
        "WarningMessage":null,
        "SuccessMessage":null
        }, 
    ]

然后像这样访问每个错误:

errors[0].Failure.ErrorMessage
//This returns "Some Message" 
errors[1].Failure.ErrorMessage
//returns "Some Other Message"