2017-10-05 11 views
3

フォーム入力をjson形式で送信しようとしています。 jsonデータを配列にデコードした後、配列にアクセスすることはできません。jsonデータを配列にデコードし、PHP(Laravel)で配列にアクセスします

{ 
    "info": { 
     "q_title": "hello", 
     "q_description": "ddd", 
     "q_visibility": "1", 
     "start_date": "Thu, 05 Oct 2017 06:11:00 GMT" 
    } 
} 

これは私のjsonデータです。私のLaravelコントローラは次のとおりです:

public function store_quiz(Request $request) 
    { 
     $data = json_decode($request->getContent(), true); 

     $input = $arrayName = array(
      'title' => $data["info"]["q_title"], 
     ); 

     CreateQuiz::create($input); 

     $redirect = '/'; 
     return $redirect; 
    } 

残念ながら$data["info"]["q_title"]はNULLを返します。私のjsonの "q_tittle"にアクセスするには?

+0

することができますしますprint_r()$要求 - >のgetContent());.nullである可能性があります – iCoders

+0

$ dataを表示すると、あなたの配列が表示されます – Stender

+0

あなたのリクエストボディは '$ request-> getContent()'が返す有効なjson – user2659982

答えて

0

json_decodeのように2番目の引数なしでデータにアクセスするだけです。

$data->info->q_title 

第2引数をtrueに設定すると、オブジェクトが配列に変換されます。

$data = json_decode($request->getContents(),true) //then use 
$data['info']['q_title'] 

、あなたが$request->getContents()で何を取得されていませんならば、問題は、あなたが送信しているリクエストです。

また、私のためにそれが動作するため、たぶん$request->getContent()コンテンツは、あなたの例と異なっているJSONペイロード

Laravel 5: Retrieve JSON array from $request

Posting JSON To Laravel

+0

なぜ私はこの中で-2を得ているのかわかりません。 –

+0

@ Dhaval.he given true trueの場合、返されたオブジェクトは連想配列に変換されます。これは理由があります。 – iCoders

+0

@DhavalPurohitはドキュメントhttp://php.net/manual/en/function.jsonを見ています。 -decode.php( - ; – Neodan

1

を取得する方法については、この2つのリンクをご確認ください。

あなたが持っているものを確認してみてください$request->getContent()

例:

<?php 
$source = '{ 
    "info": { 
     "q_title": "hello", 
     "q_description": "ddd", 
     "q_visibility": "1", 
     "start_date": "Thu, 05 Oct 2017 06:11:00 GMT" 
    } 
}'; 
$data = json_decode($source, true); 
echo $data['info']['q_title']; 
+0

はい、実際問題は$ request-> getContent()にあります。@Neodan –

0

ソリューション:

私のデータは、jQueryのでvar dataに保存されていました。データを投稿する

私は、だから私は$request->getContent()から予期しない値を得た

$.ajax({ .... data: {data: data} .... }); 

代わりの

$.ajax({ .... data: data .... }); 

を使用。ここで

0

は、これを行うのがよりLaravelスタイルの方法です:

public function store_quiz(Request $request) 
{ 
    $input = $arrayName = array(
     'title' => $request->input('info.q_title'), 
    ); 

    CreateQuiz::create($input); 

    $redirect = '/'; 
    return $redirect; 
} 

そして、あなたのjavascriptのアプリがapplication/jsonContent-Typeヘッダーを設定し確認してください。 Laravelはjson_decode()です。


出典:https://laravel.com/docs/5.5/requests(取得JSONの入力値)

関連する問題