【问题标题】:Not able to parse json response by api in php无法通过 api 在 php 中解析 json 响应
【发布时间】:2017-04-18 11:31:59
【问题描述】:

我正在尝试通过 url 解析 php 中的 json 以获取响应:

https://en.wikivoyage.org/w/api.php?action=query&prop=revisions&rvprop=content&format=jsonfm&titles=Ladakh

Fot解析,我写了代码:

    <?php

$json_string =    file_get_contents("https://en.wikivoyage.org/w/api.php?action=query&prop=revisions&rvprop=content&format=jsonfm&titles=Ladakh");
$parsed_json = json_decode($json_string, true);
$parsed_data = $parsed_json['batchcomplete']['query']['pages']['18687']['revisions'];

foreach($parsed_data as $key => $value)
{
   echo $value['*'];

}

        ?>

它只打印警告:

消息:为 foreach() 提供的参数无效

我错过了什么吗?

感谢您的帮助。

【问题讨论】:

    标签: php json


    【解决方案1】:

    那是因为你需要像这样传递格式参数:

    format=json
    

    当你像 format=jsonfm 一样传递它时,它会给你

    您的网址应该是: https://en.wikivoyage.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Ladakh

    更新

    您需要使用的代码有点错误:

    $parsed_data = $parsed_json['query']['pages']['18687']['revisions'];
    

    而不是$parsed_data = $parsed_json['batchcomplete']['query']['pages']['18687']['revisions'];

    因为您的 JSON 解码数组是这样的:

    Array
    (
        [batchcomplete] => 
        [query] => Array
            (
                [pages] => Array
                    (
                        [18687] => Array
                            (
                                [pageid] => 18687
                                [ns] => 0
                                [title] => Ladakh
                                [revisions] => Array
                                    (
                                        [0] => Array
                                            (
    

    您可以使用以下几行自行检查您的数据:

    echo '<pre>';
    print_r($parsed_json);
    die;
    

    【讨论】:

    • 我在哪里通过?
    • @ShaktiPhartiyal 好一个.. :)
    • 现在我收到其他错误:'pages'、'query'、'0'、'16867' 的非法字符串偏移量
    • @DKR 如果您遇到错误,请尝试对解码后的数组执行print_r() .. 您可能使用了非法索引。
    • 我将 echo 语句更改为: print_r( $value['*']);但它对错误没有影响
    【解决方案2】:

    您的代码中的问题是您正在访问此 $parsed_json['batchcomplete']['query']['pages']['18687']['revisions'] 其中$parsed_json['batchcomplete'] 不是数组,它的string

    所需更改:

    1. 而是循环遍历$parsed_json['query']['pages']['18687']['revisions']

    2. 更改网址格式format=json

    试试这个希望它能正常工作...

    <?php
    ini_set('display_errors', 1);
    
    
    $json_string = file_get_contents("https://en.wikivoyage.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Ladakh");
    $parsed_json = json_decode($json_string, true);
    $parsed_data = $parsed_json['query']['pages']['18687']['revisions'];
    
    foreach ($parsed_data as $key => $value)
    {
        echo $value['*'];
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 2017-05-08
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      相关资源
      最近更新 更多