【问题标题】:How can I create a new array in PHP using elements from a JSON return如何使用 JSON 返回中的元素在 PHP 中创建新数组
【发布时间】:2011-08-26 23:06:39
【问题描述】:

大家好,从 Twitter 返回的 JSON 中访问元素时遇到问题。我试图从 6 个不同的帐户中检索大约 18 条推文并按时间顺序显示它们,但我不知道如何访问数组中的元素。我尝试过使用json_decode(),尝试过foreach 循环和for 循环。基本上我在以下所有内容中,我只需要以下元素:text、user->screen_name、user->profile_image_url 和 created_at。原因是当我将 php 上传到网站时,我正在构建的应用程序超时并且没有收到数据,所以我试图通过只取回所需的内容来使回报更小。任何人,这是我收到的 1 条推文的样本......

[{"in_reply_to_status_id":null,"created_at":"Thu Aug 25 01:50:07 +0000 2011","geo":null,"user":{"profile_background_tile":true,"protected":false,"url":"http:\/\/www.backpocketmemory.com","name":"Back Pocket Memory","default_profile":false,"friends_count":1115,"profile_link_color":"0084B4","default_profile_image":false,"show_all_inline_media":false,"contributors_enabled":false,"following":false,"geo_enabled":false,"utc_offset":-28800,"profile_sidebar_border_color":"C0DEED","description":"We're a hard rock\/pop band from Burbank, CA. We love you. facebook.com\/backpocketmemory @bpmchris @bpmguitar @bpmsixstring @bpmbass @bpmdrummer\r\n","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/236635469\/60509_430737311786_16094846786_5566606_2050188_n.jpg","time_zone":"Pacific Time (US & Canada)","created_at":"Mon Jul 27 20:58:35 +0000 2009","profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1320311803\/STICKER_IDEA_1_normal.jpg","is_translator":false,"profile_use_background_image":true,"profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1320311803\/STICKER_IDEA_1_normal.jpg","follow_request_sent":false,"statuses_count":2238,"profile_background_color":"C0DEED","screen_name":"bckpcktmmry","profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/236635469\/60509_430737311786_16094846786_5566606_2050188_n.jpg","favourites_count":6,"id_str":"60708421","lang":"en","verified":false,"profile_text_color":"333333","location":"Burbank, CA","id":60708421,"listed_count":19,"notifications":false,"profile_sidebar_fill_color":"DDEEF6","followers_count":683},"in_reply_to_user_id":null,"truncated":false,"coordinates":null,"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"in_reply_to_screen_name":null,"source":"\u003Ca href=\"http:\/\/www.facebook.com\/twitter\" rel=\"nofollow\"\u003EFacebook\u003C\/a\u003E","in_reply_to_user_id_str":null,"id_str":"106543849266098176","id":106543849266098176,"contributors":null,"place":null,"retweeted":false,"retweet_count":2,"text":"Want to pick up tix for Rob's Bday Show next week? Come visit us at rehearsal. 156 W Providencia in Burbank.... http:\/\/t.co\/oNvw5I6"}]

感谢任何帮助!

【问题讨论】:

  • 您能在某处发布更完整的示例吗?
  • 编辑了 OP 以在 JSON 的末尾添加“]”,但在我粘贴时没有出现。 @sberry2A 更完整的示例,我的 PHP 代码或 JSON 返回什么?

标签: php iphone arrays json


【解决方案1】:

您的 JSON 解码良好:

array (
  0 => 
  array (
    'in_reply_to_status_id' => NULL,
    'created_at' => 'Thu Aug 25 01:50:07 +0000 2011',
    'geo' => NULL,
    'user' => 
    array (
      'profile_background_tile' => true,
      'protected' => false,
      'url' => 'http://www.backpocketmemory.com',
      'name' => 'Back Pocket Memory',
      'default_profile' => false,
      'friends_count' => 1115,
      'profile_link_color' => '0084B4',
      'default_profile_image' => false,
      'show_all_inline_media' => false,
      'contributors_enabled' => false,
      'following' => false,
      'geo_enabled' => false,
      'utc_offset' => -28800,
      'profile_sidebar_border_color' => 'C0DEED',
      'description' => 'We're a hard rock/pop band from Burbank, CA. We love you. facebook.com/backpocketmemory @bpmchris @bpmguitar @bpmsixstring @bpmbass @bpmdrummer
',
      'profile_background_image_url_https' => 'https://si0.twimg.com/profile_background_images/236635469/60509_430737311786_16094846786_5566606_2050188_n.jpg',
      'time_zone' => 'Pacific Time (US & Canada)',
      'created_at' => 'Mon Jul 27 20:58:35 +0000 2009',
      'profile_image_url' => 'http://a2.twimg.com/profile_images/1320311803/STICKER_IDEA_1_normal.jpg',
      'is_translator' => false,
      'profile_use_background_image' => true,
      'profile_image_url_https' => 'https://si0.twimg.com/profile_images/1320311803/STICKER_IDEA_1_normal.jpg',
      'follow_request_sent' => false,
      'statuses_count' => 2238,
      'profile_background_color' => 'C0DEED',
      'screen_name' => 'bckpcktmmry',
      'profile_background_image_url' => 'http://a3.twimg.com/profile_background_images/236635469/60509_430737311786_16094846786_5566606_2050188_n.jpg',
      'favourites_count' => 6,
      'id_str' => '60708421',
      'lang' => 'en',
      'verified' => false,
      'profile_text_color' => '333333',
      'location' => 'Burbank, CA',
      'id' => 60708421,
      'listed_count' => 19,
      'notifications' => false,
      'profile_sidebar_fill_color' => 'DDEEF6',
      'followers_count' => 683,
    ),
    'in_reply_to_user_id' => NULL,
    'truncated' => false,
    'coordinates' => NULL,
    'favorited' => false,
    'possibly_sensitive' => false,
    'in_reply_to_status_id_str' => NULL,
    'in_reply_to_screen_name' => NULL,
    'source' => '<a href="http://www.facebook.com/twitter" rel="nofollow">Facebook</a>',
    'in_reply_to_user_id_str' => NULL,
    'id_str' => '106543849266098176',
    'id' => 106543849266098176,
    'contributors' => NULL,
    'place' => NULL,
    'retweeted' => false,
    'retweet_count' => 2,
    'text' => 'Want to pick up tix for Rob's Bday Show next week? Come visit us at rehearsal. 156 W Providencia in Burbank.... http://t.co/oNvw5I6',
  ),
)

回显所有用户的头像、姓名和加入日期:

$data = json_decode($twitter_response);
foreach($data as $d)
{
    echo '<img src="' . $d->user->profile_image_url . '" /> ' . $d->user->screen_name . ' (since ' . $d->user->created_at . ')<br />';
}

如果您使用 关联数组 作为 json_decode 输出,请确保引用适当的键,如下所示:

foreach($data as $d)
{
    echo '<img src="' . $d['user']['profile_image_url'] . '" /> ' . $d['user']['screen_name'] . ' (since ' . $d['user']['created_at'] . ')<br />';
}

工作代码:http://pastie.org/2436307(删除了某些值中的单引号 - 只需在解码/引用时对其进行转义或转换)

【讨论】:

  • 似乎解码正常,我把我们的代码扔到我的项目中看看它是否可以工作,但它没有。甚至只尝试了 $d->created_at,但没有。奇怪的。谢谢你的帮助,我要去上班了,我到那里会更仔细地检查一下。
  • 查看更新的代码,根据您的 json_decode 标志,您可能需要关联数组方法。
  • 它确实适用于 $d->created_at。我急于开始工作,并没有注意到我正在尝试使用两个 $ 符号解码我的数组变量。拿出来,很有魅力,谢谢你的帮助!
【解决方案2】:

使用http://json.parser.online.fr/ 验证您尝试json_decode 的JSON 是否有效。这是您需要使用的主要功能,它将返回一个您可以正常使用的数组。很可能您的 JSON 无效,您需要先清理它。

【讨论】:

  • 如果您花两秒钟时间将他的 JSON 粘贴到 JSONLint.com 中,您会发现它是有效的 :)
  • 我一开始这样做时显然错过了一个字符或其他东西,因为我尝试时它无效。或者,从@Narf 的回答和相关评论来看,当我发布这个答案时它是无效的。
【解决方案3】:

没有右括号,因此它不是有效的 JSON 数据。将 ] 放在字符串的末尾,它可以很好地解析 json_decode();

【讨论】:

  • 谢谢,它确实在那里,只是我粘贴时没有标记,在OP中修复它。
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 2022-01-15
  • 2021-09-04
  • 1970-01-01
相关资源
最近更新 更多