Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP将复杂的JSON数组转换为MySQL_Php_Mysql_Json_Api - Fatal编程技术网

通过PHP将复杂的JSON数组转换为MySQL

通过PHP将复杂的JSON数组转换为MySQL,php,mysql,json,api,Php,Mysql,Json,Api,我的目标是通过PHP将JSON结果中选择的信息放入MySQL。我遇到的具体问题是从JSON结果访问特定信息,因为它不是简单的列表格式。下面是我正在谈论的结构的截图,突出显示了我感兴趣的信息: 遗憾的是,我没有足够的声誉发布一张图片,所以这里它被重新发布在imgur上: 在['streams']下将列出100条流。从这些结果中,我希望获得突出显示的信息,并将其放入MySQL表中 我对更简单的JSON文件和更简单的JSON解码应用程序相当满意 $result = json_decode($

我的目标是通过PHP将JSON结果中选择的信息放入MySQL。我遇到的具体问题是从JSON结果访问特定信息,因为它不是简单的列表格式。下面是我正在谈论的结构的截图,突出显示了我感兴趣的信息:

遗憾的是,我没有足够的声誉发布一张图片,所以这里它被重新发布在imgur上:

在['streams']下将列出100条流。从这些结果中,我希望获得突出显示的信息,并将其放入MySQL表中

我对更简单的JSON文件和更简单的JSON解码应用程序相当满意

    $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版本,但再次感谢。