2017-02-21 25 views
1

私はAPIから特定のデータを取得するのに助けが必要です。 JSONデータは、私が戻って取得したいことは私のコードjsonから特定のデータを取得するにはどうすればよいですか?

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; 

?> 

である。この

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" 
    } 

ようになりますjsonファイル全体が、データで何かをしようとするとうまくいきません。私はforeachループのいくつかの種類が必要であることを知っているif/elseステートメントと多分json_decode、私はすべてこれまでに何をやったかであなたを退屈しませんでした。 、または単に空白のページです。

cURLがうんざりしているのかどうかわかりません。私は以前はこれを使用していませんでした。これはhttpsリンクなので、これで済ませています。このデータを取得する最良の方法を教えてください。

+0

まず最初にあなたは、配列 '$兼ね備え=配列()としてそれらを一緒に入れresponse'' $のcontent'と '$を取得したい場合は、 $コンビネーション['content'] = $ contente; $ combine ['info'] = $ info;あなたが望むように条件をループすることができます。 –

+0

[PHPでJSONファイルを解析する](http://stackoverflow.com/questions/4343596/parsing-json-file-with-php) – miken32

+0

[PHPでJSONからデータを抽出するにはどうすればいいですか?] (http://stackoverflow.com/questions/29308898/how-do-i-extract-data-from-json-with-php) –

答えて

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は、ユニコード文字を保存するために使用されます。
例(配列に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); 
1

が1の場合は、あなたがstdoutに出力することがではなくcurl_execを呼び出すときリターンコンテンツにcURLを伝え、すべての重要なcURLのオプションCURLOPT_RETURNTRANSFERを逃しています。

第2に、あなたはJSONを完全に破壊するいくつかの奇妙な操作をしています。

これは十分なものでなければならない:

<?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); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$content = curl_exec($ch); 
$response = curl_getinfo($ch); 

// $combine = "$content, $response"; // this is useless 
curl_close ($ch); 

$response = json_decode($content, true); 

var_dump($response); // decoded JSON, accessible as an array 
+0

ありがとう、それは働いています。 – nkr

関連する問題