我需要帮助从api获取特定数据。 json数据看起来像这样
array(1)
{
[0]=> string(18) "{"errorCode":0
"members":[
{"userId":"32"
"name":"Joy"
"age":"22"
"country":"USA"
"orders":133
"active":0}
{"userId":"38"
"name":"greg"
"age":"29"
"country":"CA"
"orders":19
"active":0}
{"userId":"29"
"name":"bob"
"age":"33"
"country":"USA"
"orders":67
"active":0}
],"total":59},
Array"
}
我想要回来的只是美国人超过25岁。
到目前为止,我的代码是
<?PHP
$url="https://api.someplace.com";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, $url );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
$content = curl_exec( $ch );
$response = curl_getinfo( $ch );
$combine = "$content, $response";
curl_close ( $ch );
$openBracket = str_replace("{","{\n",$combine);
$comma = str_replace(",",",\n",$openBracket);
$result = str_replace( ',', '<br />', $comma );
$ary = array($result);
echo $ary;
?>
这将返回整个json文件,但是当我尝试对数据执行任何操作时,它都不起作用。我知道我需要某种foreach循环,if / else语句和json_decode,我不会厌倦你到目前为止我所有人都尝试过的,因为它没有工作,我只返回所有json数据,NULL,{ ,或只是一个空白页。
我不确定cURL是否搞砸了,之前从未使用过,我必须使用它,因为它是一个https链接。请告诉我获取此数据的最佳方式。
答案 0 :(得分:1)
首先,当您调用NgModuleFactoryLoader
而不是将其输出到stdout时,您错过了告诉cURL 返回内容的所有重要cURL选项CURLOPT_RETURNTRANSFER
其次,你正在做一些完全打破JSON的奇怪操作。
这应该足够了:
curl_exec
答案 1 :(得分:0)
首先,提供的内容包含无效的JSON数据(您已经可以自己判断)。所以你将不得不解析它。
如果您需要帮助解析,请告诉我。它可以通过正则表达式轻松完成。
将内容转换为有效的JSON后,您可以使用json_decode函数将其转换为数组,以便于访问。
的用法:
$data = $valid_json;
$array = json_decode($data, true);
true
参数会将结果转换为数组而不是对象(stdClass)。
示例(将数组编译为JSON代码时):
$json_data = json_encode([
'apple_amount' => 14
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
您无需使用JSON_PRETTY_PRINT
。它用于返回“更漂亮”的结果。
JSON_UNESCAPED_UNICODE
用于保存unicode字符。
示例(将JSON编译为数组):
$result = json_decode($json_data, true);
$apples = $result['apple_amount'];
我几乎肯定你的问题源于无效的JSON,我不确定你在这里想要实现的目标:
$openBracket = str_replace("{","{\n",$combine);
$comma = str_replace(",",",\n",$openBracket);
$result = str_replace( ',', PHP_EOL, $the );