PHPでJSON形式のデータから取得する方法

このQ&Aのポイント
  • PHPで取得したJSON形式のデータからキーワードを取得する方法を教えてください。
  • $jsonには以下のデータが返ってきます。 cb({"input":"自転車","status":0,"result":[["自転車 ライト"],["自転車 26インチ"],["自転車 カバー"],["自転車 置き場"],["自転車 27インチ"],["自転車 24インチ"],["自転車 2013"],["自転車 レインカバー チャイルドシート"],["自転車 スタンド"],["自転車 チャイルドシート"]])
回答を見る
  • ベストアンサー

PHPでJSON形式のデータから取得する方法

PHPで取得したJSON形式のデータからキーワードを取得する方法を教えてください。 <?php $query = '自転車'; $url = 'http://api.suggest.search.rakuten.co.jp/suggest?cl=dir&rid=0&sid=0&oe=utf-8&cb=cb&q='.urlencode($query); $json = file_get_contents($url); print_r($json); ?> $jsonには以下のデータが返ってきます。 cb({"input":"自転車","status":0,"result":[["自転車 ライト"],["自転車 26インチ"],["自転車 カバー"],["自転車 置き場"],["自転車 27インチ"],["自転車 24インチ"],["自転車 2013"],["自転車 レインカバー チャイルドシート"],["自転車 スタンド"],["自転車 チャイルドシート"]]}) このデータから以下のキーワードデータの配列を取得するにはどうすればよいのでしょうか? 自転車 ライト,自転車 26インチ,自転車 カバー,自転車 置き場,自転車 27インチ,自転車 24インチ,自転車 2013,自転車 レインカバー チャイルドシート,自転車 スタンド,自転車 チャイルドシート

  • PHP
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

$query = '自転車'; $url = 'http://api.suggest.search.rakuten.co.jp/suggest?cl=dir&rid=0&sid=0&oe=utf-8&cb=cb&q='.urlencode($query); $json = file_get_contents( $url ); $json = trim(substr($json, 2), '()'); $obj = json_decode($json); var_dump( $obj->result ); cb とやらが、何を示すか知らないが、json として扱うなら取り払う必要がある

ssaiew32
質問者

お礼

無事に配列を取得できました。ありがとうございます。

その他の回答 (2)

  • world99
  • ベストアンサー率64% (20/31)
回答No.2

こんにちは。 まず、先の回答者さんがおっしゃったように、json_decode() を使ってPHPの変数として取得します。 次に、変数に連想配列として格納されているので、キー名 result を指定して値を取得します。 以下の実装サンプルでプログラムをご確認下さい。 【実装サンプル】 $json = '{"input":"自転車","status":0,"result":[["自転車 ライト"],["自転車 26インチ"],["自転車 カバー"],["自転車 置き場"],["自転車 27インチ"],["自転車 24インチ"],["自転車 2013"],["自転車 レインカバー チャイルドシート"],["自転車 スタンド"],["自転車 チャイルドシート"]]}'; $obj = json_decode($json); var_dump($obj->{"result"});

参考URL:
http://jp2.php.net/manual/ja/function.json-decode.php
ssaiew32
質問者

補足

ご回答ありがとうございます。 以下のソースで実行しました結果「NULL」と表示され値が取得できませんでした。 <?php $query = '自転車'; $url = 'http://api.suggest.search.rakuten.co.jp/suggest?cl=dir&rid=0&sid=0&oe=utf-8&cb=cb&q='.urlencode($query); $json = file_get_contents($url); $obj = json_decode($json); var_dump($obj->{"result"}); ?> どうもjson_decodeがうまくいかないようで、こんな場合はどうしたらいいでしょうか?

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

とりあえずjson_decodeしてみたらどうですかね。 http://jp2.php.net/manual/ja/function.json-decode.php

ssaiew32
質問者

補足

json_decodeまでは調べてやってみたんですがうまくPHPの型にデコードされないようでデータが取得できないみたいです。

関連するQ&A

  • PHPでJSONデータへのアクセスについて

    15年前にC言語を少し学び、以後はVBA等のスクリプト言語をたまにかじっている程度の初級者です。 PHPは今回初めて触ります。 AmazonのサジェストAPIでキーワードを取得しようと試みてみました。 http://completion.amazon.co.jp/search/complete?method=completion&search-alias=aps&mkt=6&q=キーワード このURLにキーワードを放り込むとJSONデータが帰ってきます。 例:キー [ "キー", [ "キーボード", "キーケース", "キーホルダー", "キーケース レディース", "キーケース メンズ", "キーリング", "キースへリング", "キーボード bluetooth", "キーボード 楽器", "キーカバー" ], [ { "nodes": [ { "alias": "computers", "name": "パソコン・周辺機器" }, { "alias": "electronics", "name": "家電&カメラ" }, { "alias": "mi", "name": "楽器" } ] }, {}, {}, {}, {}, {}, {}, {}, {}, {} ], [] ] ■■コード1 予測変換の取得 $text = "キー"; $url = 'http://completion.amazon.co.jp/search/complete?method=completion&search-alias='.$s_alias.'&mkt=6&q='.urlencode($text); $json = file_get_contents($url); $data = json_decode($json,true); foreach( $data[1] as $x){ $x = str_replace( $text , " " , $x); print $x; } このコード1で変換予測まではなんとかアクセス出来ました。 しかし、『nodes』の『name』と『alias』へアクセスするにはどういうコードを書けばアクセスできるか分からず詰まっています。 PHPもJSONも連想配列もよく分かって居ないため、 どの情報へアクセスすれば良いのかわからず数日右往左往してました。 詳しい方、『nodes』の『name』と『alias』へのアクセスの仕方をよろしければご教示下さいませ。

    • ベストアンサー
    • PHP
  • JSON形式のデータを表示したい

    はてなブックマークエントリー情報取得API(http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%A5%A8%A5%F3%A5%C8%A5%EA%A1%BC%BE%F0%CA%F3%BC%E8%C6%C0API?kid=184075) で取得したJSON形式のデータをページに表示したいのですが、どの様にすれば良いのでしょうか。 例えば http://b.hatena.ne.jp/entry/json/http://okwave.jp/ のブックマークコメントを抜き出したり、ということを想定しているのですが、可能でしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • JSONのデータから商品名の取得の仕方

    今現在下記の記述でJSONを取得しています。 ===== <html> <head> <title>JSONのデータを使ってみる</title> </head> <script type="text/javascript" src="./prototype.js"></script> <script type="text/javascript"> function execute() { var url = './ItemSearch_json.php'; var paramList = "keyword=" + encodeURIComponent("ふくろう"); var a = new Ajax.Request( url, { method: 'get', parameters: paramList, onSuccess: function(request) { // alert('読み込み成功しました'); // jsonの値を処理する場合↓↓ var json; eval("json="+request.responseText); }, onComplete: function(request) { alert('読み込みが完了しました'); $('container').innerHTML = request.responseText; // jsonの値を処理する場合↓↓ var json; eval("json="+request.responseText); }, onFailure: function(request) { alert('読み込みに失敗しました'); }, onException: function (request) { alert('読み込み中にエラーが発生しました'); } } ); } </script> <body> <div id="container">content</div> <button onclick="execute()">サンプル実行</button> </body> </html> ===== このままだと、プレーンテキストは表示されるのですが、商品名や価格の一覧などを選択して表示できません。 evalなどを使うのかなと思うのですが、はっきり分かりません。 ヒントを教えていただけないでしょうか。

    • ベストアンサー
    • AJAX
  • 自転車、チャイルドシートカバー(雨よけ)について

    自転車に付ける雨よけカバーを何にしようか悩んでます。 かごはOGKで、純正のカバーにするか(高いですが…) http://www.cb-asahi.co.jp/item/33/61/item100000016133.html 【チャイルドカバー】フロントチャイルドシートカバー ラージ みるくここあ http://item.rakuten.co.jp/cycleshop/100-014/ こんな感じにするか…… 純正のものは頭まですっぽりと入る所が良いかな~と思っているんですが、ずぼらな私としては 常に付けっぱなしにしたいなぁ、と思っていて… 似たようなものでも使った事のある方、使用感、おすすめなど教えてください(*^_^*)

  • PHP MySQLでエラーがでてしまいます。

    PHP MySQLからデータを取得したいのですが、以下のエラーが出てしまい原因が分かりません。 詳しい方お願い致します。 <b>Warning</b>: json_encode() expects exactly 1 parameter, 2 given in <b>/home/users/2/***.**-********/web/****************/php/seupPharmacyData.php</b> on line <b>21</b><br /> エラーが出るコードは以下になります。 <?php include "db.php"; $sql = "SELECT * FROM user_data"; $query = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); $result= array(); while ($row = mysql_fetch_object($query)) { $result[] = array( 'name1' => $row->name1, 'name2' => $row->name2, 'name3' => $row->name3, 'id' => $row->id, ); } //jsonとして出力 header('Content-type:application/json; charset=UTF-8'); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>

    • ベストアンサー
    • PHP
  • jQueryで配列JSONの読み込み方法

    phpからの返り値data(json形式)を表示したいのですがうまくいきません。 コンソール上でjsonを取得できているようなのですが、値を表示しようとするとundifinedと表示されてしまいます。 どのように書き換えれば動作するようになるのでしょうか? よろしくおねがいします! -------------------------------------------------------- ■ receive.js ■ -------------------------------------------------------- $.ajax({ type: "POST", url: "receive.php", data: { "id": 3 }, success: function(data){ console.log(data); alert(data.time); //ここで「undifined」のエラーが出ます!! $("#go").after(data.id); //ここは何も表示されません。 $("#str").html('準備完了'); }, error: function(data){ $("#str").html('準備未完了'); }, }); -------------------------------------------------------- ■ receive.php ■ -------------------------------------------------------- <?php require 'dbconnect.php';//dbconnectを呼び出し $data = array(); $id = $_POST['id']; $sql = " SELECT * FROM sample_table WHERE id = " . $id; $result = mysqli_query($connect,$sql) or die("クエリの送信に失敗しました。<br />SQL:".$sql); while ($row = mysqli_fetch_array($result)) { $data[] = $row; } mysqli_close($connect) or die("MySQL切断に失敗しました。"); // MySQLへの接続を閉じる header('Content-Type: application/json; charset=utf-8'); echo json_encode($data); ?> -------------------------------------------------------- ■ index.html ■ -------------------------------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript" src="./js/jquery-1.7.2.min.js"></script> <title>PHP * jQuery * ajax * MySQL</title> <script type="text/javascript" src="receive.js"></script> <script type="text/javascript" src="post.js"></script> </head> <body> <div class="ltd-form"> <form id="inquiry-form" method="get"> <fieldset> ・ ・ ・ </fieldset> <div id="go"></div> </form> </div> <div id="str"></div> </body> </html> -------------------------------------------------------- ■ 実行後のChromeのコンソール ■ -------------------------------------------------------- 0: Object 0: "3" 1: "1423789247" 2: "96" 3: "963" data1: "96" data2: "963" id: "3" time: "1423789247" --------------------------------------

  • Webクエリで取得したデーターを随時別のシートにコピーできますか?

    Webクエリで為替のデーター(表)を1分おきに取得しています。 その取得した数値の中の特定のセルの数値だけを別のシートに蓄積していく事は可能でしょうか? 具体的に書きますと、Webクエリでデーターを取得する度(1分おき)に、 Sheet1の(B.8)のセルに入っている数値を、Sheet2のB列に蓄積していきたいのです。 同時にSheet2のA列にコピーした時間(何時何分)を書き込みたいです。 説明不足かもしれませんが、よろしくお願い致します。m(_ _)m

  • 自転車、チャイルドシートカバー(雨よけ)について

    前にしていた質問をベストアンサーを決めてしまい受付終了にしてしまいまして… 再度質問です。 自転車に付ける雨よけカバーを何にしようか悩んでます。 かごはOGKで、純正のカバーにするか(高いですが…) http://www.cb-asahi.co.jp/item/33/61/item100000016133.html 【チャイルドカバー】フロントチャイルドシートカバー ラージ みるくここあ http://item.rakuten.co.jp/cycleshop/100-014/ こんな感じにするか…… 純正のものは頭まですっぽりと入る所が良いかな~と思っているんですが、ずぼらな私としては 常に付けっぱなしにしたいなぁ、と思っていて… 似たようなものでも使った事のある方、使用感、おすすめなど教えてください(*^_^*)

  • jQueryでAJAXを利用しJSONデータを取得

    商品コードを入力したら、AJAXで商品名と価格を取得して表示させ、それを確認して個数を入力して注文票を作ろうとしています。 商品名だけの取得は何とかできたのですが、商品名と価格といったように複数データを取得するのに苦労しています。 独学のプログラミングなので初歩的な所が分かっていないのだろうと思いますが、JSON形式で受け取ればいいのだろうと考えて、そうしているのですが、うまくいきません。 下記は、商品名だけなら取得できているコードですが、どこを修正したらいいでしょうか。 よろしくお願いします。 ファイル名:test1.php <html> <head> <title>test</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script> <script type='text/javascript'> $(document).ready(function(){ $("#goodsid").keyup(function(e){ var search_val=$("#goodsid").val(); $.post("./SubTest1.php",{search_term : search_val},function(data){$("#goodsname").html(data);}) }) }); </script> </head> <body> <form id="searchform" method="post"> <div> <label>商品番号</label> <input type="text" name="goodsid" id="goodsid" /> </div> </form> <div id="goodsname"></div> <div id="goodsprice"></div> </body> </html> ファイル名:SubTest1.php <?php ini_set("default_charset","utf-8"); // MySQLクラスファイルの取り込みとインスタンスの作成 require_once("../mysql.php"); $mysql = new MySQL; $term = $_POST["search_term"]; $sql = "SELECT goods_name,goods_price FROM `goods_table` WHERE goods_num ='".$term."'"; $mysql->query($sql); $row = $mysql->fetch(); // ここまででデータを取得している if ($row){ $goodsname = $row['goods_name']; }else{ $goodsname = ""; } echo $goodsname; //呼び出し元のtest1.phpに返す値 ?>

  • セレナにチャイルドシート付きの自転車は入る?

    2012年のセレナハイウェイスターに26インチ自転車を乗せれるのは説明書で確認済みなのですが、自転車に後ろチャイルドシートを付けても乗せれますか? ヘッドレスト付きです! 車で自転車と後ろチャイルドシートを自転車屋さんに持ち込みをして、取り付けてもらい、車で帰りたいのですが難しいでしょうか? ヘッドレストだけ、家に帰って来てから付けた方がいいでしょうか?

専門家に質問してみよう