进程 JSON 未知格式

Procjess JSON of unknown Formats

a 服务通过 JSON

提供以下信息
{"errors":{"subject":"foobar"}}

以及此错误数组中的其他元素

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

以及此 ok 数组中的其他元素

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

而且我完全无法处理这个结果。我总是得到 "can not ... of undefined":

我目前有:

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

如果提供了 errors 或 ok,正确的测试方法是什么?

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

SOLUTION/LEARNING: 当心PHP!如上所述 echo json_encode( array('errors' => $result['errors']) ); 不会将其编码为 JSON 数组。我误解和忽视的是,{ 是对象的 Format/Notation 而不是数组。所以要成为一个数组,它必须是 [所以最后 PHP 确实将关联数组编码为普通对象属性而不是数组。那是我错误的假设

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

    } else if (x.ok) {

    }

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

我不确定你使用的是什么语言,但似乎 json_encode 正在将你的数组转换为单个对象,然后将该对象放在 errors 键下。

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