質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    20912questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JSON

    1208questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHPでのjsonデータの取り出し

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 3,012

luckyclock

score 55

http://api.moemoe.tokyo/anime/v1/master/2016/1

上記のAPIのjsonを取り出したいのですが、うまく取りだせません。
一応

$obj= json_decode($json, true);
$obj[0]['title'];
$obj[1]['title'];
・・・


でタイトルは取り出せているのですが、
これをどうやってサイズ分回せばいいのでしょうか?
foreachかと思ったのですが、どう記述していいのか
わからない状況です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • KiyoshiMotoki

    2016/04/03 02:18

    結局、何がやりたいのですか? ご質問の回答としてはYutaTanaka様のもので言い尽くされており、 ご自身、「そのやり方でも取り出せました。」とおっしゃっているではありませんか。 もし、いずれの回答も望むものではないのであれば、何が知りたいのかを明確にしてください。

    キャンセル

  • kei344

    2016/04/03 14:10

    いったん「解決済」にされてはいかがでしょうか。

    キャンセル

回答 3

+1

// これじゃだめ?
$data_list = json_decode($json, true);
foreach ($data_list as $data) {
    echo $data['title'] .PHP_EOL;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/02 18:58

    ありがとうございます。
    そのやり方でも取り出せました。

    キャンセル

+1

蛇足ですが,json_decodeの第2引数にtrueを渡さないことを推奨します.PHPは何もかも連想配列として一緒くたにしていますが,JSON発祥の言語であるJavaScriptにおいては,

  • オブジェクト {"name":"田中", "age":20}
  • 配列 [1, 2, 3]

というように明確に区別されています.基本的にJSONの時点でオブジェクトであるものは,foreachで回したりarray_*な関数を適用する必要はないことが多く,デコード後もオブジェクトのままであるほうが簡潔に書け,可読性が高いことも挙げられます.

$entries = json_decode($json, true);
$entry[0]['title'];
$entry[1]['title'];

foreach ($entries as $entry) {
    $entry['title'];
}

こう書いていたものは

$entries = json_decode($json);
$entry[0]->title;
$entry[1]->title;

foreach ($entries as $entry) {
    $entry->title;
}

こうなります.こっちのほうがいいと思いませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/03 02:50

    > json_decodeの第2引数にtrueを渡さないことを推奨します.
    ケースバイケースではないでしょうか?

    リファレンスに記載されているとおり、PHPのプロパティ名として無効な文字を含む要素にアクセスする場合、
    プロパティ名を"{}"で囲む必要があります。
    http://php.net/manual/ja/function.json-decode.php

    また、要素名が空文字列("")の場合、第2引数にtrueを渡さない場合は勝手に"_empty_"というプロパティ名に変換されます。
    (これも、上記リファレンスの下のほうにコメントされていました。)

    テストコード
    <?php
    $json = '{"":1}';

    var_dump(json_decode($json));
    var_dump(json_decode($json, true));
    ?>

    実行結果
    object(stdClass)#1 (1) {
    ["_empty_"]=>
    int(1)
    }
    array(1) {
    [""]=>
    int(1)
    }

    キャンセル

  • 2016/04/03 04:06

    > リファレンスに記載されているとおり、PHPのプロパティ名として無効な文字を含む要素にアクセスする場合、プロパティ名を"{}"で囲む必要があります。

    確かにそうですが,APIにおいて特殊文字がJSONオブジェクトのプロパティに割り当てられているケースはごくまれです.(メジャーなところだとYouTubeAPIが$記号を含んでいたような…)ケースバイケースとして引き合いに出す根拠としては少し弱く感じられます.

    > また、要素名が空文字列("")の場合、第2引数にtrueを渡さない場合は勝手に"_empty_"というプロパティ名に変換されます。

    これは初めて知りました.しかし,プロパティ名が空文字列になっているケースは,上記のプロパティ名に特殊記号を含むケースよりも更に稀だと思います.

    こういう特殊なケースを多く内包しているAPIであれば例外的に連想配列のほうが取り扱いやすいでしょうが,基本的にはやはりオブジェクト優先です.

    キャンセル

checkベストアンサー

0

foreachで簡単に処理できますよ。

【PHPでJSONのデータを処理する方法】
https://syncer.jp/how-to-use-json

JSONデータの構造がわかりにくい場合は下記ようなツールがいくつかあるのでそれを使うとわかりやすくなります。

【JSONデータのデコード整形ツール - Digitra】
http://dev.digitra.net/tools/jsonfairing.php

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/02 18:58

    実はそのサイトはすでにみていて、ループ処理のところを参考に
    foreach ($obj as $key => $value) {
    echo $obj[$key];
    }
    にするとArrayArray・・・になるし
    foreach ($obj as $key => $value) {
    echo $value;
    }
    としてもArrayArray・・・
    になるしうまくいかないなぁと思っていましたが、
    foreach ($obj as $value) {
    echo $value['title'];
    }
    で取り出せました。
    $key => $value
    しかしながら上記の形はどういうとき必要になるのか理解できていません
    echo $keyとしますとtitleなどの要素名がでるのかと思ったら普通に
    0~の配列番号?が出力されただけでした。

    キャンセル

  • 2016/04/02 20:06

    > 0~の配列番号?が出力されただけでした。
    $obj に入っているのが配列だからです。

    > しかしながら上記の形はどういうとき必要になるのか理解できていません
    foreach ( $obj[ 0 ] as $key => $value ) {
    echo $key.' : '.$value.'<br />';
    }
    // // こう出るのでは?
    // title_short2:
    // twitter_account: gundam_tb
    // public_url: http://gundam-tb.net/
    // title_short1: サンダーボルト
    // sex: 0
    // twitter_hash_tag: gundam_tb
    // id: 281
    // sequel: 0
    // created_at: 2016-01-01 23:40:06.0
    // cours_id: 9
    // title: 機動戦士ガンダム サンダーボルト
    // title_short3:
    // updated_at: 2016-01-01 23:40:06.0

    キャンセル

  • 2016/04/02 20:19 編集

    > しかしながら上記の形はどういうとき必要になるのか理解できていません

    // こういう使い方したりできます
    foreach ($data_list as $key => $data) {
    // タイトルが 機動戦士ガンダム サンダーボルト だったら消す
    if ($data['title'] == ''機動戦士ガンダム サンダーボルト') {
    unset($data_list[$key]);
    }
    }

    キャンセル

関連した質問

  • 解決済

    phpでJSONデータを出力

    phpでJSONデータを出力したいのですが、 できませんのでご協力いただけると助かります。 JSONデータを取得し、以下とします。 $json=json_decode($res,

  • 解決済

    PHPにて、多次元配列の配列のキーを昇順に振り直したいです。

    当方PHP勉強中の者です。 PHPにて、多次元配列の配列のキーを昇順に振り直したいです。 キーがバラバラな多次元配列を、 $test = [ [1] => [

  • 解決済

    phpでBing Search APIから受け取ったJsonデータの要素を取り出したい。

    現在、phpでFacebook Messenger Platform BOTを作成しようとしています。 その中で、Bing Search APIを用いて、受け取った単語から検索を

  • 受付中

    <tr><td>の表にしたい

    今、グルナビのレストラン検索apiを使っています。 初めての利用で色々と困っています。 一つがapiで入手したデータをウェブで表示する際のことです。 <tr><td>を使えば

  • 解決済

    apiで質問したいこと

    apiで質問があります。質問というより悩みです。 apiを使ってサイトを構築しようと思い、apiで得た情報をデータベースに貯めるやり方を考えていましたが、そのやり方は出来ないまた

  • 解決済

    PHP ユーザ定義関数の書き方について

    前提・実現したいこと 3桁の数字の配列が、変数$iの数字と一致(数字の並び順は関係なし)していたら、 "OK"のメッセージを表示させるプログラムを書きたいです。 発生して

  • 解決済

    中身が空の連想配列を作成したい

    連想配列で中身が空のものを作成したいのですが、書き方がわかりません。solrのコミットのコマンドとなるように、{"commit":{}} となるようにしたいです。 調べてみた

  • 解決済

    phpで複数のフラグを見て1つのフラグを生成する

    3つのフラグを見てその結果で1つのフラグ(全部許容することをいみする)を判定結果にまぜたいのですが、 変数の存在判定やnullチェックをするとくどい処理になってしまうことと、

同じタグがついた質問を見る

  • PHP

    20912questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JSON

    1208questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。