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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JSON

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

3346閲覧

別テーブルのデータがネストされているJSONデータから下の階層になっているデータを取り出すには

lkjgffh

総合スコア37

JSON

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/01/12 06:37

編集2018/01/12 07:06

###前提・実現したいこと
現在このような構造のJSONをLaravelで受け取り、BBBBという階層があればその内容をデータベースに保存するというプログラムを書いています。
それぞれの階層は送られてきたり送られてこなかったりするので、階層ごと(項目ごと)に有無の判定をしています

各項目AAAA・BBBB・CCCCはデータベースに入れるとき別々のテーブルに保存します。
各テーブルのデータが別々に送られてくればいいのですがBBBBのようにほかのテーブルに入れるデータにくっついてくる形で送られてくるものがあります

現在ネストされている階層、今回の場合はBBBBという項目の有無の判定ができなくて困っています

{ "AAAA":[{ "aaaa":"1", "BBBB":[{ "bbbb":"1" }] }], "CCCC":{ "cccc":"1c1c1c" } }

###発生している問題・エラーメッセージ
このようなプログラムの場合BBBBの階層になるとそもそもBBBBを認識しません

if ( $request["BBBB"] != NULL) { $AAAA = [ 'bbbb' => $request->input('BBBB.bbbb'), ]; DB::table('BBBB')->insert($BBBB); }

###試したこと
したのかいそうにアクセスするにはこのようにするのかと思い試したのですが、うまく行きませんでした

if ( $request["AAAA.BBBB"] != NULL) { echo 'BBBB'; }

入ってきた値をそのまま出力し、

dd($request); #content: "{"AAAA":[{"aaaa":"1","BBBB":[{"bbbb":"1"}]}]}"

となっていたので、オブジェクトを配列にすればいいのかと思い配列変換を試みましたがうまく希望する形式になりませんでした

$request = json_decode(json_encode($request), true); array:7 [▼ "attributes" => [] "request" => [] "query" => [] "server" => [] "files" => [] "cookies" => [] "headers" => [] ]

直接アクセスするにはと思い下記のようにもしましたができませんでした

$array = $request->AAAA[0]; dd($array); array:2 [▼ "aaaa" => "1" "BBBB" => array:1 [▶] ] $array = $request->AAAA[1]; dd($array); Undefined offset: 1

"{"AAAA":[{"aaaa":"1","BBBB":[{"bbbb":"1"}]}]}"

上記のような形式でくる場合BBBBは値なのでしょうか?
AAAAというテーブルとBBBBというテーブルのデータが今回のようにくっついてポストされる場合どのようにしたのかいそうに入ってくるBBBBテーブルの処理を書けばよいでしょうか?

###バージョン情報など
Laravel5.5

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

クライアントからのHTTPリクエストで、body部をJSON形式で格納している場合は、content-typeをJSON用(application/json)にしておけば、Laravelが認識して$requestではPHP配列になるかと思うので、Laravelで受け取った際にJSON文字列のままで困るという場合は検証してみてください。
[Laravel]ajax非同期通信のRequestParameterを受け取る

投稿2018/01/13 05:43

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

かりにオブジェクトをxとして、構造から言うと

  • xオブジェクトは"AAAA"をキーにした配列と"CCCC"をキーにしたオブジェクトをもっている
  • x["AAAA"]配列は0番目の要素に"aaaa"をキーにした文字列と"BBBB"をキーにした配列をもっている
  • x["AAAA"][0]["BBBB"][0]オブジェクトは"bbbb"をキーに文字列をもっている

したがって

javascript

1var x={ 2 "AAAA":[ 3 { 4 "aaaa":"1", 5 "BBBB":[ 6 { 7 "bbbb":"1", 8 } 9 ], 10 }, 11 ], 12 "CCCC":{ 13 "cccc":"1c1c1c", 14 } 15}; 16 17console.log(x["AAAA"][0]["BBBB"][0]["bbbb"]);

投稿2018/01/12 08:43

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問