如何从json获取特定数据?

时间:2017-02-21 21:42:05

标签: php json curl

我需要帮助从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链接。请告诉我获取此数据的最佳方式。

2 个答案:

答案 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 );