PHP初心者がJSON参照できない問題

このQ&Aのポイント
  • PHPの初心者がJSONから値を参照できない問題に直面しています。JSONにリスト名があるためうまく取得できない状況です。JSONのフォーマットが間違っているのか、他のページで使用されているJSONの形式が異なるのか悩んでいます。
  • 質問内容は、PHP初心者がJSONを参照する方法がわからず困っている状況です。JSONにリスト名があるため、うまく値を取得できない状態です。JSONのフォーマットが間違っている可能性や他のページで使用されているJSONの形式が異なる可能性が考えられます。
  • PHPの初心者がJSONの参照に関する問題に直面しています。JSONにリスト名が含まれているため、値を取得することができません。JSONのフォーマットの間違いや他のページで使用されているJSONの形式との違いに悩んでいます。質問内容が初歩的なものであるため、自力で解決できずに困っています。
回答を見る
  • ベストアンサー

PHP初心者です。JSONが参照できません・・・

普段Webのデザイン・コーダーを担当しておりますが、 PHPのフォームを修正することになりました。 その中でJSONから値を参照しなければならないのですが、 JSONにリスト名?があるせいか、うまく取得できません。 $test = 'Store:[ { "store_name":"ストア1", "store_id":"10" }]'; var_dump(json_decode($test, true)); 上の「Store」がなければ配列の中身を参照できるのですが・・・。 そもそもJSONのフォーマットが間違えているのでしょうか。 他のページでこのJSONを使用しているので、なるべく変更したくないのが現状です。 かなり初歩的な質問で申し訳無いのですが、ググってもこの形式(Storeがあるような)ではひっかからなかったため、質問させていただきました。 何卒、宜しくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

>そもそもJSONのフォーマットが間違えているのでしょうか。 そうですね。 Store:[{"store_name":"ストア1","store_id":"10"}] は、JSON形式ではありません。Store: を取り除いてください。

katsuo-soft
質問者

お礼

早速のご回答ありがとうございました。 初心者の稚拙な質問にご対応いただき恐縮です。 ちなみに、他のサイト http://www.ibm.com/developerworks/jp/web/library/wa-ajaxintro10/ で下記のようなJSONの書き方もあるようですが、この場合、 peopleの中にある配列を参照するのは無理、ということなのでしょうか。 { "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ]} 度々申し訳ありませんが、よろしければご回答いただければ幸いです。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

Store:・・・は文法的におかしいですが、 オブジェクトの要素として認識させればよいのでは 例に近い処理であれば <?PHP $test = '{"Store":[ { "store_name":"ストア1", "store_id":"10" }]}'; var_dump(json_decode($test, true)); ?>

katsuo-soft
質問者

お礼

ご回答ありがとうございました。 結局1番目の方にご回答いただいたように、余計な部分を削除する形で対応しました。 稚拙な質問にご回答いただき、ありがとうございました。

関連するQ&A

  • PHPでJSONを扱うときに配列の参照について

    Web ad Fortune http://jugemkey.jp/api/waf/api_free.php という占いのAPIをPHPにて使おうと思い、 JSON形式で情報が帰ってくるようなので JSONについて調べて json_decode()関数を使うことにしました。 しかし、いまいち配列からのデータ参照ができません。どういうことかというと、 牡羊座のランクを取り出したいときに 【ソース】 <?php $json = file_get_contents("http://api.jugemkey.jp/api/horoscope/free/2009/02/27","r"); $obj = json_decode($json); echo "<pre>"; print_r($obj->horoscope->2009/02/27[0]["rank"]); echo "</pre>"; ?> としても何も表示されません。 ちなみに、print_rの部分を print_r($obj->horoscope); とすると http://nanigashi.biz/json.php のように表示されます。 配列からの情報の読み込み(データ参照)がわかりません。 教えてください。

    • ベストアンサー
    • PHP
  • フォームからjQuery,jQuery.jsonを使ってJSONを作っ

    フォームからjQuery,jQuery.jsonを使ってJSONを作ってPHPで表示したい。 こんばんは。2、3日ずっと悩んでて解決しないので助けてください。 jQuery,jQuery.jsonを使ってJSONを作成しています。 クリックイベントに var form = $("#sform"); var json = $(form.serializeArray()); var strJson = $.toJSON(json); という形をとって $.ajax({ url : "request.php", type : "post", data : strJson, success: function(request){ $('#result').html(request); } }); で送っています。 ただPHP側で var_dump($_POST); を行ってもArray ( ) と表示されます。 firebugで見たところpostに入っているデータは以下の通りです。 {"0":{"name":"date","value":"2010/09/15"},"1":{"name":"type","value":"new"},"2":{"name":"bin[]","value":"2"},"3":{"name":"bin[]","value":"3"},"length":4} var_dumpで表示できないのはなぜでしょうか? 上記で変数json のまま送るとオブジェクトとして送れてvar_dump でも表示できます。 ただ今はjson の勉強をしているので、できればなぜこうなっているのかを理解したいです。 基本的なところで勉強不足かもしれませんが、何かアドバイスなど頂けると嬉しいです。 よろしくお願いします。

  • PHPで.jsonを保存せずにデータの取得

    はじめまして、よろしくお願いいたします。 ポストで送信した値が.jsonにて外部ドメイン(クロスドメイン)にて戻ってくるのですが、ブラウザ側で保存タブが出てしまいます。 この.jsonファイルを保存せずにPHP側で取得して出力をしたいのですが、どのようにしたら取得できるのかを解る方がおられましたら教えてください。 以下のような感じで試しましたが取得できませんでした。 いろいろ試しましたが、どうやってもブラウザに保存タブが出てしまいます。 以下サンプルコード $json_string = file_get_contents('php://input', true); $obj = json_decode($json_string); var_dump($obj); よろしくお願いいたします。 ※OKWAVEより補足:テーマ「php」から投稿された質問です。

    • ベストアンサー
    • PHP
  • JAVAのjsonの扱いについて

    お世話になります。 JAVAのjsonの扱いについてPHPのjson_decode()のように処理をしたいと 思っていますがうまくいかず、どなたかご教授おねがいします。 下記jsonデータの値を取得したいです。 PHPのjson_decode()のように簡単にデータにアクセスする方法はないのでしょうか? {"class":{"count":2},  "class_info":[{"name":"クラスA",          "teacher":{"name":"sam", "age":35},          "member":["AA","BB"]},          {"name":"クラスB",          "teacher":{"name":"risa", "age":30},          "member":["CC","DD"]}]} [Test.java] 下記ではMapを使用していますが簡単にアクセスできる方法を探しています。 ========================================= import net.arnx.jsonic.JSON; import java.util.Map; public class Test { public static void main(String[] args) { Map map = (Map)JSON.decode("{'class':{'count':2},'class_info':[{'name':'Aclass','teacher':{'name':'sam', 'age':35},'member':['AA','BB']},{'name':'Bclass','teacher':{'name':'risa', 'age':30},'member':['CC','DD']}]}"); /* class の情報 */ // phpの連想配列でいうとmap['class'] 表示 System.out.println(map.get("class")); // phpの連想配列でいうとmap['class']['count']表示させたい /* class_info の情報*/ // phpの連想配列でいうとmap['class_info'][0]を表示させたい // phpの連想配列でいうとmap['class_info'][0]['name']を表示させたい // phpの連想配列でいうとmap['class_info'][0]['teacher']を表示させたい // phpの連想配列でいうとmap['class_info'][0]['teacher']['age']を表示させたい // phpの連想配列でいうとmap['class_info'][0]['member'][1]を表示させたい } } =========================================

    • ベストアンサー
    • Java
  • 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
  • PHP 関数化

    失礼します。今回関数化をしたいのですが、うまくできません 内容はjsonファイルを読みこみ連想配列に変換したいです。 当方PHP初心者なので当たり前の事かもしれませんが宜しくお願い致します。 function Array_trans_json($file_path,$json_arr){ $json = file_get_contents($file_path); //jsonデータを読み込む $json = mb_convert_encoding($json,'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); //文字化けを防ぐ //$json_arr["piyo"][control_num];でアクセスできる $json_arr = json_decode($json,true); //jsonデータを連想配列に変換 } $file_path = "./test.json"; if(file_exists($file_path)){ $json_arr; Array_trans_json($file_path,$json_arr);

    • ベストアンサー
    • PHP
  • PHPのjson_encode()

    御世話になります。 PHPからjson_encode() した配列をJavascriptに送って、javascript側ではJSON.parse()でデータを戻して使おうとしていますが、上手く行きません。 これは自作のカラオケシステムのプログラムで、歌手の名前を入力してボタンを押すと、MySQLデータベースに登録されたその歌手の曲がすべてセレクトリストに表示され、その中から一曲選択してその曲のカラオケが始まるという仕組みです。 以前には働いていたのですが、何かのきっかけでソースコードをいじっている間に働かなくなり、原因がわからないままいろやってみましたが(PHP側でjson-encode なしでやってみたり、javascript側でJSON.parse なしでやってみたり)、PHPの配列データをjavascript側にうまく渡せてないようです。ソースコードを添付しますので、どこがおかしいのかチェックして頂ける方がいらっしゃれば有難く思います、 どうかよろしくお願いいたします。 ちなみに、曲を選択するには他にもう一つの方法があり、曲の識別番号(Number)を入力する方法でこれはちゃんと働いています。 プログラムを走らせた、画面ショットも添付しておきます。 <!DOCTYPE HTML> <html> <head> <title> select_song.php</title> <?php $host = "localhost"; $user = "root"; $pass = "rsi2018"; $database = "karaoke"; $connection = mysqli_connect($host, $user, $pass, $database) or die("cannot connect to database"); //================ for all data ============= $numbers = array(); $titles = array(); $singers = array(); $query ="select number, title, singer from num2song where test<>'redundant' order by title"; // avoid redundant data $result= mysqli_query($connection, $query) or die("fail-1"); $i=0; while($row=mysqli_fetch_assoc($result)) { $numbers[$i]=$row['number']; $titles[$i] =$row['title']; $singers[$i]=$row['singer']; $i++; } $dataCount = $i; $JSnumber = json_encode($numbers); $JStitles = json_encode($titles); $JSsingers = json_encode($singers); ?> <script type="text/javascript"> var totalData = <?php echo $totalCount; ?>; var allNumbers = JSON.parse('<?php echo $JSnumbers; ?>'); var allTitles = JSON.parse('<?php echo $JStitles; ?>'); var allSingers = JSON.parse('<?php echo $JSsingers; ?>'); //============================ function showAllSongs(){ //============================= if(document.getElementById("songNumber").value){ document.getElementById("songNumber").value=""; } if(document.getElementById("mySelect")){ document.getElementById("selectSpace").innerHTML=""; } alert("inside showAllSongs"); alert(totalData); var kashu = document.getElementById("singer").value; alert(kashu); var myParent = document.getElementById("selectSpace"); var selectList = document.createElement("select"); selectList.id ="mySelect"; selectList.name ="mySelect"; myParent.appendChild(selectList); var opt = document.createElement("option"); opt.text = "==== 曲を選ぶ ===`"; opt.value = "dummy"; selectList.appendChild(opt); for(var i=0; i<totalData; i++){ if( allSingers[i].indexOf(kashu) >= 0){ var opt = document.createElement("option"); opt.text = allTitles[i]; opt.value = allNumbers[i]; selectList.appendChild(opt); }else{ continue; } }//for var select = document.getElementById("mySelect"); select.onchange=function(){ document.getElementById("selectNumber2").value = document.getElementById("mySelect").value; } }// function </script> </head> <body style="background-color:navy; color:white ;font-size:14pt"> <form method="POST" action="findsong.php" target="main"> Input song number <br> <input type="text" size="8" name="songnum" id="songNumber" style="font-size:12pt"> <input type="submit" value="Play music" style="font-size:12pt"> </form> <BR> <hr> <form method="POST" action="findsong.php" target="main"> Input singer name <BR> <input type="text" size="26" id="singer" name="singer" style="font-size:16pt"><br> <input type="hidden" name="songnum2" id="selectNumber2"> <input type="button" value="Show songs" onclick="showAllSongs()" style="height:40px;font-size:10pt"> <input type="submit" value="Play Music" style="height:40px;font-size:10pt"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • JSON多次元オブジェクト(?)を配列へ変換したい

    ・下記のようなJSON多次元オブジェクト(?)を配列へ変換したいのですが、どうすれば良いでしょうか? ・json_decode試したけどうまくいきませんでした ・出来れば、data以下だけを配列で取得したいです array(1) { [0]=> string(1284) {"version":1,"req_id":null,"error":null,"data":[ {"name":"Sad","j_title":"A","id":"23","thumb":"hoge1","date":"2009","title":"Ch","url":"hoge2"}, {"name":"Wil","j_title":"r","id":"30","thumb":"hoge3","date":"2013","title":"Po","url":"hoge8"} ]} [1]=> string(1282) {"version":1,"……

    • ベストアンサー
    • PHP
  • HTMLをPHPでJSONにして返すには

    jqueryでurlをPHPに送って、そのurlのhtmlファイルから、titleタグやh1タグの内容を抽出し、連想配列に格納。そして、その連想配列をJSON形式にしてjqueryに返し、htmlにレンダリングしたいのですが上手くいきません。 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> function site_check(){ var url = $("#url").val(); if(url=="") return; $.getJSON("test.php?url=" + encodeURIComponent(url) ,function(res){ $("#title").html(res.title); $("#h1").html(res.h1); }); } </script> </head> <body> <div class="form"> URL <input type="text" id="url" value="" style="width:300px;" onfocus="this.select()" onkeypress="if(event.keyCode==13) site_check()" /> <button onclick="site_check()" />チェック</button> </div> title:<span id="title"></span></br> h1:<span id="h1"></span> </body> test.php↓ <?php $html=mb_convert_encoding(file_get_contents($_GET['url']), 'UTF-8', 'auto'); $array = array(); $pattern = "/(?<=<title>).+?(?=<\/title>)/mis"; preg_match($pattern,$html,$array['title']); $pattern = "/(?<=<h1>).+?(?=<\/h1>)/mis"; preg_match($pattern,$html,$array['h1']); header("Content-Type: application/json; charset=UTF-8"); echo json_encode($array); ?> このコードだと、test.phpからは、[object Object]と、レスポンスが返ってきてしまいます。

    • ベストアンサー
    • PHP
  • JSONデータをフォームにセットしたい

    JSONデータを「jQuery.val」でフォームにセットしたいのですが、うまくいきません。どうしたら良いでしょうか? 具体的には、[",]が削除された状態でセットされます。元は配列ですが、JSONデータへ変換したので、フォームへセット出来ると思っていたのですが…。 JSONは、「ある形式に沿った文字列」という認識でいたのですが、違うのでしょうか? ■コード $jsondata= json_encode($originalarray) <script type="text/javascript">  var result = <?php echo($jsondata) ?>;  $("input#jsondata").val(result); </script> ■変数 ・$originalarray Array ( [0] => ./im/1a.j [1] => ./im/2.j [2] => ./im/9_1.j ) ・jsondata [".\/im\/1a.j",".\/im\/2.j",".\/im\/9_1.jp"] ・フォームにセットされる値 ./im/1a.j./im/2.j./im/9_1.jp →ここに「jsondata」をセットさせたい

専門家に質問してみよう