LoginSignup
0
0

More than 3 years have passed since last update.

Type:JSONに、INSERTができない人へ

Last updated at Posted at 2020-12-25

現状の問題

MySQL version 5.7.30

MySQLで、type:jsonの列を作ったのですが、なぜかinsertできませんでした。
image.png

解決策: json_encodeを使用する

まず、テーブルを作ります。(type:jsonの列あり)

create table sample_json(id int, json_data json);

次にこうすればinsertできるはずなのですが..できない。なんでや..

insert into sample_json values(1, '{"from" : "Japan", "name" : "Taro"}');

↓ 修正

insert into sample_json values(1, "{\"from\": \"Japan\", \"name\": \"Taro\"}");

データベースに登録されました〜やったね!
image.png

解説

なぜ、こんな変な形にしたらいけるんでしょうか?
文字列をjson形式に変換しないといけないからです。(以下のような変換です。)

'{"from" : "Japan", "name" : "Taro"}' → "{\"from\": \"Japan\", \"name\": \"Taro\"}"
# 変数jsonを定義
$json = '{"from" : "Japan", "name" : "Taro"}';
# json_encode(?, JSON_UNESCAPED_UNICODE)で、日本語状態で、文字列をjson形式に変換。
# json_encodeだけだと、jsonの最初と最後に「"」がついてしまうので、mb_substr()を2つ使い、それらを削除。
$newjson = 
 mb_substr(
  mb_substr(
   json_encode($json, JSON_UNESCAPED_UNICODE)
  , 1)
 , 0, -1);
# 出力: {\"from\" : \"Japan\", \"name\" : \"Taro\"}
print($newjson);

参考
【MySQL】JSON型のカラムを操作する場合の落とし穴
MySQLでJSONデータを扱ってみよう!JSON型の使い方とは?
【JavaScript】javascriptでのデータオブジェクトのkeyに「:(コロン)」があるときのアクセス

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0