2017-05-15 9 views
1

私はMySql + Pythonを使用しています。私はjsonフィールドを持つMySqlテーブルを持っています。ユーザは任意の数のフィールドをjsonオブジェクトに格納できます。例えば任意フィールドのJson検索

:クエリ後

{id:12, name:"a", age: 23} 
OR 
{id:5, distance: 23, distance_unit: "mile"} 

は素晴らしい作品:私は事前にフィールド名を知っているとき

SELECT JSON_EXTRACT(name, "$.id") as name 
FROM table 
WHERE JSON_EXTRACT(name, "$.id") > 3 

しかし、それだけで動作します。任意のフィールドを検索する方法はありますか?次のようなものがあります。

すべての結果をメモリにロードし、効率的でないためにPythonを使用して検索しません。

答えて

0

はたぶん、あなたはそのキー(すなわちフィールド)を知らなくても、でJSONデータを検索しようとしていますか?

もしそうなら、JSON_SEARCH機能を試すことができます。一致する値が見つかった場合はキー名(フィールド名)を返し、一致しない場合はNULLを返します。関数の2番目のパラメータは、すべてのJSONフィールドで検索を実行するか、最初の一致で終了するかを決定します。

例:

CREATE TABLE temp1(mydata json); 
INSERT INTO temp1 values('{"id":"5", "distance":"23", "age":"23", "distance_unit":"mile"}'); 


SELECT json_search(mydata, "one", "5") AS success FROM temp1; 
-- Returns "$.id" 



SELECT json_search(mydata, "all", "23") AS success FROM temp1; 
-- Returns ["$.age", "$.distance"] 



SELECT json_search(mydata, "all", "99") AS success FROM temp1; 
-- Returns NULL 

Demo

あなたは、おそらくNoneのためのPythonコードでクエリから返された値をチェックすることができますか?

+0

ご返信ありがとうございます。私は価値によって検索していません。数多くの値が一致する可能性があります。私はキーがjsonオブジェクトに存在するかどうかを知りたいのですが、それが何であれ、その値は何ですか。 – Momi

+0

その場合、JSON_EXTRACTはあなたが望むものとまったく同じだと思います。たとえば、この[link](http://rextester.com/WLKH42087)をご覧ください。クエリが 'SELECT TRIM(BOTH') 'に変更されたとき、' SELECT TRIM(BOTH '' '' FROM json_extract(mydata、 '$。 "id"'))AS test_field FROM temp1' - "'FROM json_extract(mydata、' $。" id1 "'))AS test_field FROM temp1'(存在しないキー)は、' NULL'を返します。これはPythonコードで再度チェックできます。どう思いますか? –

+0

それは働いた!ありがとう! – Momi

関連する問題