2017-12-11 11 views
0

私は列からJSON形式のデータを検索するためにjson_search使用しています。このコマンドを実行することはできません。通常のjsonデータの場合、正常に動作しています。しかし、文字列に二重引用符がある場合は機能しません。

MySQLのクエリjson_search - #2014 - 同期のうちコマンド。あなたは今

SELECT JSON_SEARCH(user_information, 'one', '%name%', null, '$[*].label'); 

これは、正規のJSONデータのための細かい作業だが、それは、単一の列のデータベースに格納されたデータ以下のために働いていません。作業されていないクエリに

データ例:

[{ 
    "name":"John Smith", 
    "value":"John", 
    "label":"Sm"ith" 
}] 


をここでは、この例のdb-fiddleです。

データでわかるように、ラベルキ​​ーの文字列はsm"ithです。文字列の真ん中にダブルクォートを追加しただけで、db-fiddleのエラーの下に表示されます。機能json_searchの引数1で は

無効JSONテキスト: "オブジェクトメンバ後 カンマまたは '}' がありません。"

しかし、私のローカルホスト上で、エラーの下に見せています。


2014 - 同期してコマンド。

+0

私は、[DB-フィドル](https://www.db-fiddle.com/f/49UDVFsyHEazRvC6Lyb25q/0)を参照して、問題を再現することはできません。 – wchiquito

+0

@wchiquito私は問題を再現しました。特殊文字のせいではありませんでした。文字列に二重引用符が追加されたためでした。私は質問を更新しました。私もdb-fiddleを作成しました。リンクはこちらですhttps://www.db-fiddle.com/f/8T39N3B4R8jZgn3vyG6cCQ/0 – Onkar

答えて

0

Creating JSON Valuesを参照して、二重バックスラッシュエスケープシーケンスを使用する必要があります。

mysql> SELECT JSON_VALID(' 
    '> [ 
    '> { 
    '>  "name":"John Smith", 
    '>  "value":"John", 
    '>  "label":"Sm"ith" 
    '> } 
    '> ] 
    '> ') `is_json_valid?`; 
+----------------+ 
| is_json_valid? | 
+----------------+ 
|    0 | 
+----------------+ 
1 row in set (0.00 sec) 

mysql> SELECT JSON_VALID(' 
    '> [ 
    '> { 
    '>  "name":"John Smith", 
    '>  "value":"John", 
    '>  "label":"Sm\\"ith" 
    '> } 
    '> ] 
    '> ') `is_json_valid?`; 
+----------------+ 
| is_json_valid? | 
+----------------+ 
|    1 | 
+----------------+ 
1 row in set (0.00 sec) 
+0

ありがとう@wchiquito ...!それは正常に動作していますが、mysqlクエリからjsonをwellフォーマットで作成する方法はありますか? – Onkar

+0

@Onkar:mysqlのクエリから?。あなたは詳細を教えてください。あなた@wciquito – wchiquito

+0

は有効なJSONをチェックするか、それが正常に動作していないためのソリューションを与えています。しかし、私はもっと深く行きたいです。私は上記のクエリを使用することができますjsonを検証したいが、それはjsonが無効である0を返す場合は、そのjsonは、同じクエリのその行のためにその引用符の前に\\を追加したいフォーマットです。たとえば、新しい質問を作成して、詳しく説明しますか? – Onkar

関連する問題