LaravelとGoogleスプレッドシート連携時、このエラーがでたときの対策です。
データベースにnullが含まれている場合は、このエラーが出る可能性があり。
“error”: {
“code”: 400,
“message”: “Invalid JSON payload received.
わたしは原因がつかめず、長々と
なぜだめなの~!?
と、四苦八苦しました。
この記事が同じような思いをしている方の役に立てば、苦労も報われます!
LaravelとGoogle:Invalid JSON payload receivedエラー対策
問題の対策としては、nullの値を空文字列に変換すること。
array_mapを使ったりすると、実現できます。
array_mapとは、配列の各要素に、何らかの処理を適用できます。
array_mapについてPHP公式マニュアルより:
array (および、 それ以上の配列が与えられた場合は arrays) の各要素に callback を適用した後、 適用後の要素を含む array を返します。 callback 関数が受け付けるパラメータの数は、 array_map() に渡される配列の数に一致している必要があります。
*引用元:https://www.php.net/manual/ja/function.array-map.php
array_mapを使って、null値を空文字に変換するコード例はこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$tests=Test::all()->toArray(); $newValues = []; foreach($tests as $test) { $test = array_map(function($value) { if (is_null($value)) { return ''; } else { return $value; } }, $test); $newValues[] = array_values($test); } |
コードの意味データベースからtestテーブルの値を全て取得して、これを配列に変換し、$testsに代入。
foreachで$testsをひとつずつにばらします。
ひとつずつの要素の中に null値があれば、空文字列に変換。
これを配列にセット。
このようにnull値をなくせば、エラーを回避できるかと思います。
もし他の原因であれば、ごめんなさい。
全体のコード例は、GoogleスプレッドシートとLaravelの連携を解説した記事に載せているので、併せて参考にしてくださいね。
なお今回のようなエラーが起こる原因は、Laravelでは、デフォルトでNullが入るように設定されているため。
LaravelとNullの関係?については、別記事にまとめたので、気になったらご覧ください。