【问题标题】:how to convert this json data in php如何在php中转换这个json数据
【发布时间】:2020-09-04 04:58:44
【问题描述】:

我正在使用一个 api,它给了我一个非常奇怪的 json 格式.. 我正在发布它的数据,我正在通过它..

info = { "title" : "Asian Dad: B Again!? (you die)", "image" : "http://i.ytimg.com/vi/IN7o2Iy89WQ/default.jpg", "length" : "2", "status" : "serving", "progress_speed" : "", "progress" : "", "ads" : "", "pf" : "", "h" : "f53762dab34022e9d851ab71e0bf166f" };

我正在尝试在 php 中打印此数据,但我无法做到这一点..我的网页上没有显示任何内容,.... 我的代码是..

我第一次尝试,

<?php
$url="http://www.website-name.com/a/itemInfo/?video_id=IN7o2Iy89WQ&ac=www";
$info=file_get_contents($url);
$info=json_decode($info,true);
echo $info;
?>

我的第二次尝试是,

<?php
$url="http://www.website-name.com/a/itemInfo/?video_id=IN7o2Iy89WQ&ac=www";
$info=file_get_contents($url);
$info=json_decode($info,true);
$info->h;
?>

我最后一次尝试是,

<?php
$url="http://www.website-name.com/a/itemInfo/?video_id=IN7o2Iy89WQ&ac=www";
$info=file_get_contents($url);
$info=json_decode($info,true);
$info['h'];
?>

什么都没有发生..

请有人帮助我

API 网址已转换...

【问题讨论】:

  • $url="http://www.website-name.com/itemInfo/?video_id=IN7o2Iy89WQ&amp;ac=www"; 这是在发送 JSON 吗?你确定吗?
  • 你能在第二行和第三行之后var_dump($info); 向我们展示输出吗?
  • @SasankaPanguluri 请立即检查..
  • @TheWolf ...如果我使用 var_dump($info);,我的网页显示为 NULL

标签: php api json


【解决方案1】:

页面正在发送 "info = { "title" : "Asian Dad: B Again!? (you die)", "image" : "http://i.ytimg.com/vi/IN7o2Iy89WQ/default.jpg", "length" : "2", "status" : "serving", "progress_speed" : "", "progress" : "", "ads" : "", "pf" : "", "h" : "058ce93db26fce4a9f1cb41ae2e7c1bb" };"

您不能对此使用 json_decode,因为末尾的 info =; 不是 json。你必须去掉info =;

   $url="http://www.website-name.com/a/itemInfo/?video_id=IN7o2Iy89WQ&ac=www";
   $info = file_get_contents($url);
   $info = trim($info, "info = ");
   $info = rtrim($info, ";");
   $json = json_decode($info, true);
   echo $json['status'];

【讨论】:

  • 出现错误...致命错误:无法在第 8 行的 /home/lpmqcrax/public_html/download/info.php 中使用 stdClass 类型的对象作为数组
  • @Kapil 抱歉,缺少 json_decode 的第二个参数。它现在可以工作了:-)
  • 但它不能正常工作...我想打印 $json['h'] 值,它是 f53762dab34022e9d851ab71e0bf166f 但它给了我 0cedafe839fc2337f52355ba959576bb 这是不公平的...你为什么会这样?
  • 它给出的所有信息都是正确的,除了“h”值..我正在做所有这些..任何方式来获得正确的值。
  • @Kapil 要获得正确的值,您必须修复服务器代码。
【解决方案2】:

我从你的例子中的 URL 得到的数据是

info = { "title" : "Asian Dad: B Again!? (you die)", "image" : "http://i.ytimg.com/vi/IN7o2Iy89WQ/default.jpg", "length" : "2", "status" : "serving", "progress_speed" : "", "progress" : "", "ads" : "", "pf" : "", "h" : "5cddd4d1667f24aa9a0f5a6cc21e24e3" };

这是一个可执行的 JavaScript sn-p,实际上不是 JSON。您的 php 失败的原因是由于 'info =' 部分... json_encode 在解码失败时返回 null。

虽然这是将变量分配给 JavaScript 对象,但如果您删除了“info =”和分号,它也可以作为 JSON 工作。假设响应是可预测的,您可以使用 php str_replace 执行此操作,但是找到一个为您的源返回 JSON 的 API 将是一个更可靠和更简洁的解决方案。

【讨论】:

    【解决方案3】:

    如果您在 cmets 中提到的第二行 var_dump($info) 时收到 NULL,则 file_get_contents() 不会检索数据。

    这很可能是因为allow_url_fopen 在 PHP.ini 中设置为 false

    【讨论】:

    • 收到错误警告:在第 4 行的 /home/lpmqcrax/public_html/download/info.php 中为 foreach() 提供的参数无效
    【解决方案4】:

    来自json_decode() documentation

    采用 JSON 编码的字符串并将其转换为 PHP 变量。

    如果第二个参数设置为 true,则返回一个数组!

    所以你的第一次和第二次尝试是错误的。!它应该进行第三次尝试。只需检查您是否检索到数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多