Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用youtube-data-api-v3处理标题中的JSON嵌入引号_Php_Json_Youtube Data Api - Fatal编程技术网

Php 如何使用youtube-data-api-v3处理标题中的JSON嵌入引号

Php 如何使用youtube-data-api-v3处理标题中的JSON嵌入引号,php,json,youtube-data-api,Php,Json,Youtube Data Api,我一直收到YouTube data API v3返回的数据的JSON解码错误,返回的JSON包含嵌入title字段中的引号 $json = curl_init(); $optArray = array( CURLOPT_URL => $apiCall, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => FALSE, CURLOPT_SSL_VERIFYHOST => FALS

我一直收到YouTube data API v3返回的数据的JSON解码错误,返回的JSON包含嵌入
title
字段中的引号

$json = curl_init();
$optArray = array(
    CURLOPT_URL => $apiCall,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => FALSE,
    CURLOPT_SSL_VERIFYHOST => FALSE
);
curl_setopt_array($json, $optArray);
$result = curl_exec($json);
curl_close($json);
错误消息:语法错误

最近的一个例子包括
“videoId”:“Q6AYg0oLfC8”
,其中返回标题字段:
“title”:“特朗普及其盟友希望您“适应”冠状病毒危机:近距离观察”

对于PHP7JSON解码器v1.4.0,由于
title
字段中嵌入了引号,因此不会解析此JSON

$json = curl_init();
$optArray = array(
    CURLOPT_URL => $apiCall,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => FALSE,
    CURLOPT_SSL_VERIFYHOST => FALSE
);
curl_setopt_array($json, $optArray);
$result = curl_exec($json);
curl_close($json);
处理
title
或API JSON响应返回的任何其他字段中的嵌入引号的最佳实践是什么


如果有帮助,我可以将YouTube返回的JSON作为文件上传。(或者可以解释文件是如何附加到堆栈溢出的。)

根据我的经验,我从未遇到过由YouTube数据API的任何端点生成的无效JSON

另一方面,请注意这是完全合法的。也就是说,如果遵循规定的语法:嵌入JSON字符串中的每个引号字符都必须转义,即前面必须有一个反向solidus字符,即
\

否则,JSON的这一基本特性将被无缝地处理。(我假设您实际使用的是
json\u decode
)例如,对于这个简单的json文本:

{"foo":"bar\"baz\"boo"}
json_decode
根据需要正常工作。请注意,在PHP中,JSON文本和对该函数的调用如下所示:

$val = json_decode('{"foo":"bar\\"baz\\"boo"}')
为了进一步帮助您,请在此处发布产生上述错误的相关PHP代码,以及生成的错误消息


OP发布源代码后更新

在股票GNU/Linux
bash
提示符下运行以下
curl
命令行时:

$ curl -o Q6AYg0oLfC8.json "https://www.googleapis.com/youtube/v3/videos?key=$YOUTUBE_DATA_APP_KEY&id=Q6AYg0oLfC8&part=contentDetails,id,liveStreamingDetails,player,recordingDetails,snippet,statistics,status,topicDetails"
我确实获得了一个有效的JSON文本。
标题
字段如下所示:

$ grep Q6AYg0oLfC8.json -ne '"title"' -B4
 8-      "id": "Q6AYg0oLfC8",
 9-      "snippet": {
10-        "publishedAt": "2020-07-16T01:00:02Z",
11-        "channelId": "UCVTyTA7-g9nopHeHbeuvpRA",
12:        "title": "Trump and His Allies Want You to \"Adapt\" to the Coronavirus Crisis: A Closer Look",
--
91-        ],
92-        "categoryId": "23",
93-        "liveBroadcastContent": "none",
94-        "localized": {
95:          "title": "Trump and His Allies Want You to \"Adapt\" to the Coronavirus Crisis: A Closer Look",

这些字符串确实有效。

无法在我们的PHP7.2服务器中使用内置的
json\u解码来重现错误。您需要提供导致错误的实际代码,并使用
json\u last\u error
和/或
json\u last\u error\u msg
或任何其他错误源提供实际错误。@chibi:请参阅下面我的更新答案。@chibi:您能检查并生成错误消息(如果有)吗通过调用
curl\u exec
使用
curl\u error
获得,就像在这个官方文件中一样?@chibi:你能不能也运行我在下面更新的答案中显示的
curl
命令,并比较(例如使用
diff
)你获得的两个JSON文件(你已经拥有的和新获得的一个)?@chibi:同时发布你的
$apiCall
(编辑你的应用程序密钥)。$result=curl\u exec($json)$array=json_decode($result,true)@chibi:一定要发布整个
curl
调用序列,从
curl\u init
curl\u close
(当然要编辑你的应用程序键)。只需编辑您的原始帖子,使源代码更加可见。@chibi:还要考虑上面给您的建议,并发布相应的错误消息。