【问题标题】:"JSON text must be an object or array" error“JSON 文本必须是对象或数组”错误
【发布时间】:2011-11-29 06:15:49
【问题描述】:

我正在使用 PHP 连接到 API 并使用 JSON 和 HTTP POST 注册一些信息,但进展不顺利。

这就是我的工作:

  1. 我使用 json_encode 函数创建一个 JSON 对象:

    $name = 'Mike';
    
    $surname = 'Hans';
    
    $fields = array('name' => json_encode($name), 'surname' => json_encode($surname));
    $postData = json_encode($flds);
    
  2. 获得发布数据后,我只需使用 curl 连接到 API 并使用 oauth 登录,但 API 响应说:

JSON 文本必须是对象或数组(但找到数字、字符串、true、 false 或 null,使用 allow_nonref 来允许)

我在 Google 中检查了 allow_nonref,但我找不到任何关于 PHP 的东西,我只找到了 Perl。有没有人有任何解决方案/建议来解决这个问题?

谢谢!

【问题讨论】:

  • 为什么要分别编码,然后一起编码?

标签: php json


【解决方案1】:

您可能需要将整个 POST 作为 JSON 发送,而不需要将调用嵌套到 json_encode,如下所示:

$fields = array('name' => $name, 'surname' => $surname); 
$postData = json_encode( $fields);

【讨论】:

    【解决方案2】:

    要跟进@nickb 的回答,请只拨打json_encode 的一个电话,它在构建你和我的有效json 方面要好得多,而且启动效率更高! (虽然我们正在进入微优化领域)。

    您是否尝试过获取json_encode 的输出并将其放入验证器/格式化程序中,例如:http://jsonviewer.stack.hu/

    另外,我认为另一个可能的问题可能是您发送的标头?接收服务器可能很严格,并强制您使用正确的“内容类型”。是否有可用的 API 文档?

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2021-07-01
      • 2020-08-15
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      相关资源
      最近更新 更多