使用JSON正文对PHP file_get_contents()POST进行故障排除

时间:2017-11-06 23:47:00

标签: php json rest

我无法弄清楚如何使我的PHP脚本工作,我不允许在服务器上使用调试工具或在本地运行它。请帮忙。

它的目标是开放数据API(Statistics Norway / SSB),特别是这一个:

$url = "http://data.ssb.no/api/v0/no/table/08940";

使用POST查询API并根据发布的消息正文提供输出,该消息正文必须格式化为JSON。

我在PHP中使用嵌套数组构建$ body,并在下面提供json_encode($body, JSON_PRETTY_PRINT);的输出(截断)。

这在SSB API Console以及Restlet Client中都运行良好。

{
    "query": [
        {
            "code": "UtslpTilLuft",
            "selection": {
                "filter": "item",
                "values": [
                    "1",
                    "2"
                ]
            }
        },
        {
            "code": "ContentsCode",
            "selection": {
                "filter": "item",
                "values": [
                    "UtslippCO2ekvival"
                ]
            }
        },
        {
            "code": "Tid",
            "selection": {
                "filter": "item",
                "values": [
                    "1990",
                    "1991"
                ]
            }
        }
    ],
    "response": {
        "format": "json"
    }
}

这是file_get_contents()的脚本:

$json_body = json_encode($body);
$options = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-type: application/json',
        'content' => $json_body
    )
);
$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);
$output = json_decode($file, true);

我查看了 How to post data in PHP using file_get_contents? 中给出的答案,尝试用http_build_query()和http_build_query(json_encode())替换json_encode(),尝试使用不同的'header'但print_r ($输出)什么也没给我。

编辑:我删除了$output = json_decode($file, true);,现在打印出JSON数组!仍需要弄清楚如何将其转换为PHP变量但如何在没有json_decode的情况下做到这一点......?

编辑2:我发现数据实际上不是常规JSON,而是JSON-STAT,采用一维数组的形式。消息体中的正确调用(响应:格式)不是“json”而是“json-stat”。使用“json”,返回的数据与json_decode()不兼容。

非常感谢有关如何将其解析为PHP中的常规关联数组的任何提示!

0 个答案:

没有答案