我无法弄清楚如何使我的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中的常规关联数组的任何提示!