从嵌套的json循环php中提取数据
Posted
技术标签:
【中文标题】从嵌套的json循环php中提取数据【英文标题】:Pull data from nested json loop php 【发布时间】:2015-04-22 08:29:21 【问题描述】:好的,我已经为此奋斗了两天了!!这是我的 Json 结构。 [
"uuid":"/random number==",
"meeting_number":7196503037,
"host_id":"random number",
"topic":"My's Personal Meeting Room",
"start_time":"2015-01-06T22:01:07Z",
"timezone":"America/Denver",
"duration":56,
"total_size":378080,
"recording_count":1,
"recording_files":[
"id":"long number",
"meeting_id":"/NS90bsSTLeGzo6cT0nwXw==",
"recording_start":"2015-01-06T22:01:09Z",
"recording_end":"2015-01-06T22:01:14Z",
"file_size":378080,
"play_url":"https://myurl"
]
,
我正在尝试从***数组(名为“会议”)中提取开始时间,并从二级数组(recording_files)中提取播放网址。我正在使用 json_decode 将文件解码为数组。
我已尝试在此站点上找到许多变体,但似乎没有任何内容可以访问播放网址。 变化 1 $aha = json_decode($response,true);
foreach ($aha['meetings'] as $key => $value)
foreach($key['recording_files'] as $subkey => $newvalue)
echo '<p>Time : '.$value['start_time'].'</p>
<a href="'.$newvalue['play_url'].'">Recording</a><br>';
这会在 foreach 中提取无效参数。
变化 2 foreach ($aha['meetings'] as $key => $value)
echo '<p>Time : '.$value['start_time'].'</p>
<a href="'.$value['play_url'].'">Recording</a><br>';
这会为 play_url 提取未定义的索引。与在 ['play_url'] 之前引用 ['recording_files'] 的代码相同
变化 3: 然后我尝试放弃第一级,只从第二级提取数据: $aha = json_decode($response,true);
foreach ($aha['meetings']['recording_files'] as $key => $value)
echo '<p>Time : '.$value['recording_start'].'</p>
<a href="'.$value['play_url'].'">Recording</a><br>';
这给了我一个未定义的 ['recording_files'] 索引和一个 foreach 错误。
变化 4。 $aha = json_decode($response,true);
foreach ($aha['meetings'] as $key => $value)
$link=$key['recording_files'];
echo '<p>Time : '.$value['start_time'].'</p>
<a href="'.$link['play_url'].'">Recording</a><br>';
这让我最接近 - 没有错误但没有链接。我假设这里的代码看到了该字段,但只是没有从中提取数据......
请帮助一个新手json人!
【问题讨论】:
结构有问题。打开 [ 和右括号不匹配 您将 json 存储在文件中或通过 url ? @user4035 是的,他们确实...recording_files
是一个对象数组。
好的,每次在 json 中打开方括号 [
时,都会启动一个数组本身。因此,您应该访问$aha['meetings'][0]['recording_files'][0]['play_url']
,您可以在其中将 0 替换为相应的索引或通过循环访问。如果您不确定数组在哪里,只需在 json_decode
上创建一个 var_dump
所以使用 0 会从 0 记录中拉取数据。我想弄清楚如何通过循环访问它。
【参考方案1】:
编辑:
如果您的数据如下所示:
$str = "\"meetings\":[
\"uuid\":\"/random number==\",
\"meeting_number\":7196503037,
\"host_id\":\"random number\",
\"topic\":\"My's Personal Meeting Room\",
\"start_time\":\"2015-01-06T22:01:07Z\",
\"timezone\":\"America/Denver\",
\"duration\":56,
\"total_size\":378080,
\"recording_count\":1,
\"recording_files\":[
\"id\":\"long number\",
\"meeting_id\":\"/NS90bsSTLeGzo6cT0nwXw==\",
\"recording_start\":\"2015-01-06T22:01:09Z\",
\"recording_end\":\"2015-01-06T22:01:14Z\",
\"file_size\":378080,
\"play_url\":\"https://myurl\"
]
]";
$json = json_decode($str);
$res = $json->'meetings';
foreach($res as $keys)
echo $keys->'start_time'."<br>";
foreach ($keys->'recording_files' as $data)
echo $data->'play_url'."<br>";
echo $data->'recording_start'."<br>";
【讨论】:
修复它的代码是:$aha = json_decode($response,true); foreach ($aha['meetings'] as $key => $value) echo 'Time : '.$value['start_time'].'
录制'; 【参考方案2】:如果真的有$aha['meetings']
(你不显示它),那么使用第二个foreach
中的值而不是键:
foreach($aha['meetings'] as $value)
foreach($value['recording_files'] as $newvalue)
【讨论】:
【参考方案3】:修复它的最终代码。
$aha = json_decode($response,true);
foreach ($aha['meetings'] as $key => $value)
echo '<p>Time : '.$value['start_time'].'</p>
<a href="'.$value['recording_files'][0]'play_url'.'">Recording</a><br>';
这只是找到引用 play_url 片段的正确格式的问题。 非常感谢大家!
【讨论】:
以上是关于从嵌套的json循环php中提取数据的主要内容,如果未能解决你的问题,请参考以下文章
从 Firebase remoteMessage 中的嵌套 JSON 中提取数据
如何从在线 JSON API 中提取嵌套数据对象? [关闭]