通过PHP将复杂的JSON数组转换为MySQL
我的目标是通过PHP将JSON结果中选择的信息放入MySQL。我遇到的具体问题是从JSON结果访问特定信息,因为它不是简单的列表格式。下面是我正在谈论的结构的截图,突出显示了我感兴趣的信息: 遗憾的是,我没有足够的声誉发布一张图片,所以这里它被重新发布在imgur上: 在['streams']下将列出100条流。从这些结果中,我希望获得突出显示的信息,并将其放入MySQL表中 我对更简单的JSON文件和更简单的JSON解码应用程序相当满意通过PHP将复杂的JSON数组转换为MySQL,php,mysql,json,api,Php,Mysql,Json,Api,我的目标是通过PHP将JSON结果中选择的信息放入MySQL。我遇到的具体问题是从JSON结果访问特定信息,因为它不是简单的列表格式。下面是我正在谈论的结构的截图,突出显示了我感兴趣的信息: 遗憾的是,我没有足够的声誉发布一张图片,所以这里它被重新发布在imgur上: 在['streams']下将列出100条流。从这些结果中,我希望获得突出显示的信息,并将其放入MySQL表中 我对更简单的JSON文件和更简单的JSON解码应用程序相当满意 $result = json_decode($
$result = json_decode($json);
foreach ($result as $key => $value)
我在想也许我需要使用深度变量?但是发现很难找到关于它的很多信息
如果有人能给我任何帮助或给我指出一个好的信息来源(因为我一直在努力寻找任何东西),那么我将不胜感激
如果有更多有用的信息,请告诉我,我会添加它
编辑:链接到json请求:
您可以这样做:
$values = array();
$result = json_decode($json);
foreach($result['streams'] as $stream) {
array_push(
$values,
array(
'viewers' => $stream['viewers'],
'status' => $stream['channel']['status'],
'display_name' => $stream['channel']['display_name'],
'game' => $stream['channel']['game'],
'delay' => $stream['channel']['delay'],
'name' => $stream['channel']['name'],
)
);
}
或:
也许你可以这样做:
$values = array();
$result = json_decode($json);
foreach($result['streams'] as $stream) {
array_push(
$values,
array(
'viewers' => $stream['viewers'],
'status' => $stream['channel']['status'],
'display_name' => $stream['channel']['display_name'],
'game' => $stream['channel']['game'],
'delay' => $stream['channel']['delay'],
'name' => $stream['channel']['name'],
)
);
}
或:
JSON对象基本上类似于
[
links: {
self: http://example.com,
next: http://example.com/foo,
},
streams: [
{
channel: {
foo: 'bar'
},
one: 'one',
somethingElse: 'Something else',
moreStuff: 'more stuff',
}
]
]
当您解码一个JSON对象时,您将得到一个表示该对象的PHP对象/数组
$x = json_decode('[1,2,3]')
将为您提供与…相同的数组
$x= array(1,2,3)
如果加载所显示的JSON并运行以下命令:
foreach ($result as $key => $value)
这与访问$result->links
和$result->streams
相同。每个都包含更多的数据
在我的示例中,如果我想从通道中获取“foo”元素,我会:
$streams = $result->streams //Get the streams array
$stream = $streams[0] //Get the first stream object
$channel = $stream->channel //Get the channel object
$foo = $channel->foo //Get the value 'bar' out of the foo property.
只要结构是可预测的(而且是可预测的),我就可以遍历流,因为它只是一个数组
$streams = $result->streams //Get the streams array
foreach ($streams as $stream) {
$channel = $stream->channel //Get the channel object
$foo = $channel->foo //Get the value 'bar' out of the foo property of every stream.
}
JSON对象基本上类似于
[
links: {
self: http://example.com,
next: http://example.com/foo,
},
streams: [
{
channel: {
foo: 'bar'
},
one: 'one',
somethingElse: 'Something else',
moreStuff: 'more stuff',
}
]
]
当您解码一个JSON对象时,您将得到一个表示该对象的PHP对象/数组
$x = json_decode('[1,2,3]')
将为您提供与…相同的数组
$x= array(1,2,3)
如果加载所显示的JSON并运行以下命令:
foreach ($result as $key => $value)
这与访问$result->links
和$result->streams
相同。每个都包含更多的数据
在我的示例中,如果我想从通道中获取“foo”元素,我会:
$streams = $result->streams //Get the streams array
$stream = $streams[0] //Get the first stream object
$channel = $stream->channel //Get the channel object
$foo = $channel->foo //Get the value 'bar' out of the foo property.
只要结构是可预测的(而且是可预测的),我就可以遍历流,因为它只是一个数组
$streams = $result->streams //Get the streams array
foreach ($streams as $stream) {
$channel = $stream->channel //Get the channel object
$foo = $channel->foo //Get the value 'bar' out of the foo property of every stream.
}
在浏览器中打开此url-
https://api.twitch.tv/kraken/streams?limit=100/
给我一个JSON。我把它抄了进来-
并看到它有流和\u链接键
根据您所关心的问题,试试这个-
$result = json_decode($json);
if( isset( $result['streams'] )){
$streams = $result['streams'];
foreach($streams as $stream) {
$viewers = $stream->viewers;
$status = $stream->channel->status;
$display_name = $stream->channel->display_name;
$game = $stream->channel->game;
$delay = $stream->channel->delay;
$name = $stream->channel->name;
$sql = "INSERT INTO twitchinfo (viewers, status, display_name, game, delay, name) VALUES ($viewers, \"$status\", \"$display_name\", \"$game\", $delay, \"$name\")";
mysql_query($sql)or die(mysql_error());
}
}
在浏览器中打开此url-
https://api.twitch.tv/kraken/streams?limit=100/
给我一个JSON。我把它抄了进来-
并看到它有流和\u链接键
根据您所关心的问题,试试这个-
$result = json_decode($json);
if( isset( $result['streams'] )){
$streams = $result['streams'];
foreach($streams as $stream) {
$viewers = $stream->viewers;
$status = $stream->channel->status;
$display_name = $stream->channel->display_name;
$game = $stream->channel->game;
$delay = $stream->channel->delay;
$name = $stream->channel->name;
$sql = "INSERT INTO twitchinfo (viewers, status, display_name, game, delay, name) VALUES ($viewers, \"$status\", \"$display_name\", \"$game\", $delay, \"$name\")";
mysql_query($sql)or die(mysql_error());
}
}
你能用10个字或更少的话说出你想做什么吗?我已经看过你的帖子三次了,我知道你很困惑。。。但是我不知道你想做什么。我会把我的全部代码添加到帖子中,也许这会有所帮助。但我要寻找的主要问题是如何访问JSON文件中嵌入几层的信息。我想要JSON->Streams->0中的信息,然后是0->Channel中的信息。然后以0-100重复。希望这对我有所帮助,并能立即添加我当前的代码。
我非常感兴趣
=>我感兴趣
请提供更多的上下文。尝试稍微澄清一下。你能用10个字或更少的字说明你想做什么吗?我已经看过你的帖子三次了,我知道你很困惑。。。但是我不知道你想做什么。我会把我的全部代码添加到帖子中,也许这会有所帮助。但我要寻找的主要问题是如何访问JSON文件中嵌入几层的信息。我想要JSON->Streams->0中的信息,然后是0->Channel中的信息。然后以0-100重复。希望这有助于我现在添加我的当前代码。我非常感兴趣
=>我感兴趣
请提供更多的上下文。尝试稍微澄清一下。现在将测试一些东西,问题是每个循环我都需要来自['x'](本例中为0)的东西,然后是来自['channel']的东西如果这有道理的话。我在我的问题中添加了我当前的代码,这可能会有所帮助。现在查看所有内容并测试一些东西,虽然我没有看到,但看起来很不错!现在我将用它来测试一些东西,问题是对于每个循环,我希望从['x'](本例中为0)得到一些东西,然后从['channel']得到一些东西,如果这有意义的话。我在我的问题中添加了我当前的代码,这可能会有所帮助。现在查看所有内容并测试一些东西,虽然我没有看到,但看起来很不错!正是我要找的信息,非常感谢,非常感谢。正是我要找的信息,非常感谢,非常感谢。效果很好,谢谢,我只需要将“$stream->channel->display\u name”更改为“$stream”['channel']['display\u name']”。可能是因为我的netbeans版本,但再次感谢。工作正常谢谢,我唯一需要更改的是将“$stream->channel->display_name”更改为“$stream”['channel']['display_name']”。可能是因为我的netbeans版本,但再次感谢。