繁体   English   中英

json_decode PHP 的问题

[英]Problem with json_decode PHP

I'm receiving a json array from python as the return of curl_exec in PHP (first json PHP -> python, that returns another json), and decode fails due to bad syntax. 收到的 json 是有效的,但是如果我将这个 json 转换为字符串并打印它,我会得到一个包含 29 个字符的字符串,但是如果我打印 strlen((string)$my_json) 它会显示 50。

这是代码:

$results = curl_exec($ch);
curl_close($ch);
var_dump(json_decode($results));

这将返回 NULL。 如果我执行以下操作

echo (string)$results;

它打印 [[11, "stuffstuf", "stuffs"]] (29 个字符),这是一个有效的 json。 但如果我这样做

echo strlen((string)$results);

它打印 50。

所以,我不知道发生了什么。 任何想法将不胜感激=)

是不是您周围有一些 html 标签,而在执行简单回显时您看不到?

试试: echo htmlentities((string)$results); 要查看更多信息,或查看页面的 html 源代码。

如果json_decode()失败,则表示该字符串不是标准的 JSON。

您还可以使用json_last_error_msg()来找出它返回 NULL 的原因。 如果 json_decode 中有任何错误,这将返回错误消息。

Seldaek 的回答很有帮助,我相信这是总体上最好的答案。

我遇到了类似的问题,由使用单引号而不是双引号引起,以及 Red Hat 上 PHP 的最新支持版本与 Z3D945423F8E9496C4029A5D8C65ZB4 上的 PHP 5.5 之间的差异。

从文件中读取下一行时,RHEL 上的 PHP 返回“无效或格式错误的 JSON”,因为它在我的 Ubuntu Z2FEC392304A5C23AC138DA22847F9B7 实例上很好。

{ 'book': 'Dune', 'author': 'Frank Herbert', 'ISBN-13': '978-0441172719' }

更改为双引号,如下所示,解决了我的问题

{ "book": "Dune", "author": "Frank Herbert", "ISBN-13": "978-0441172719" }

Seldaek 说的对,使用json_last_error非常好。 我还在json_decode之前使用了stripslashes 这是我的代码:

$resp = stripslashes($resp);

$resp_json = json_decode($resp);

switch(json_last_error())
{
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_STATE_MISMATCH:
        echo ' - Invalid or malformed JSON';
    break;
    case JSON_ERROR_UTF8:
        echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
    break;
}

之后,当您debug时,您仍然可以说错误 4 - JSON_ERROR_SYNTAX。 在调试模式下获取变量$respVALUE并将其粘贴到免费的 web 工具,用于 JSON 转换 @ Json 转换检查 - jsonlint 并检查您的转换有什么问题。

它可以打印出 json_last_error_msg() ,它以文本格式而不是代码给出错误。 所以不需要使用开关和错误处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM