Php 如何使用youtube-data-api-v3处理标题中的JSON嵌入引号
我一直收到YouTube data API v3返回的数据的JSON解码错误,返回的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
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:还要考虑上面给您的建议,并发布相应的错误消息。