Procjess未知格式的JSON

时间:2015-03-24 14:43:45

标签: javascript json properties

服务通过JSON提供以下信息

{"errors":{"subject":"foobar"}}

此错误数组中的其他内容

OR

{"ok":{"subject":"foobarfoobar"}}

此ok阵列数组中的其他内容

因此,两者中的任何一个都存在,而不是同时存在。任何一个不存在我总是得到一个访问错误,因为当然不存在这个问题

我完全不知道如何处理这个结果。我总是得到“不能......未定义”:

Currenlty我有:

if (data[0].hasOwnProperty("status")) {
        alert('ddd');
}

如果提供错误或确定,测试的正确方法是什么?

更新 blex是对的:但在服务器端使用:     echo json_encode( array('errors' => $result['errors']) ); 这是不是意味着我错误已经是数组的第一个元素?为什么这被看作是一个对象?

溶液/ LEARNING: 小心PHP!如上所述,echo json_encode( array('errors' => $result['errors']) );不会导致将其编码为JSON数组。我误解和监督的是,{是对象不是阵列的格式/表示法。所以要成为一个数组,它必须是[所以在最后,PHP确实将关联数组编码为普通的对象属性,而不是数组。这是我错误的假设

2 个答案:

答案 0 :(得分:1)

var x = { "errors": { "subject": "foobar" } };
    //var x = { "ok": { "subject": "foobarfoobar" } };
    if (x.errors) {

    } else if (x.ok) {

    }

答案 1 :(得分:0)

基本上,你已经走上正轨了。 hasOwnProperty是检查这些键是否存在的正确方法。

我不确定您使用的是哪种语言,但似乎json_encode正在将您的数组转换为单个对象,然后将该对象置于错误键下。

最后一件事,您应该考虑使用HTTP响应代码。如果您可以为好的方案返回200 OK,并为您的错误返回400或500级别的代码,那么您将能够使用更好的方法来确定如何处理这些情况。例如,jQuery.ajax能够放置两个处理程序,一个用于成功,一个用于失败。