2017-11-28 20 views
1

動的目的でデータベーステーブルにJSON配列を挿入する予定です。キーと値のペアを持つJSONオブジェクトの抽出に問題はありませんが、JSON配列とは逆です。たとえば以下を参照してください。MySQLからJSON配列を抽出する方法

理想的
[{"LCM": {"id": 333, "barcode": "ABC"}, "DCover": {"id": 444, "barcode": "CDE"}, "date_associated": "2017-11-27 23:59:59"}, {"LCM": {"id": 555, "barcode": "EFG"}, "DCover": {"id": 666, "barcode": "GHI"}, "date_associated": "2017-11-27 23:59:59"}, {"LCM": {"id": 777, "barcode": "IJK"}, "DCover": {"id": 888, "barcode": "KLM"}, "date_associated": "2017-11-27 23:59:59"}] 

、上記のそれらのそれぞれごとに、抽出された場合 - それは、このようになります:

{"LCM": {"id": 777, "barcode": "IJK"}, "DCover": {"id": 888, "barcode": "KLM"}, "date_associated": "2017-11-27 23:59:59"} 

を今の質問は、私はそうとして抽出することができますどのように、次のとおりです。

1. {"LCM": {"id": 333, "barcode": "ABC"}, "DCover": {"id": 444, "barcode": "CDE"}, "date_associated": "2017-11-27 23:59:59"} 
2. {"LCM": {"id": 555, "barcode": "EFG"}, "DCover": {"id": 666, "barcode": "GHI"}, "date_associated": "2017-11-27 23:59:59"} 
3. {"LCM": {"id": 777, "barcode": "IJK"}, "DCover": {"id": 888, "barcode": "KLM"}, "date_associated": "2017-11-27 23:59:59"} 

、それらのことで、私はすなわち、その後、必要に応じごとに解析することができるようになります: "$ .LCM" または "$ .DCover.barcode"

JSON_EXTRACT(...)は、特定のJSONオブジェクトへのキーを定義することによってのみ利用可能と思われます。しかし、これは値だけのJSON配列(私が知る限り)では機能しません。

うまくいけば、私はここでヒントを得ることができます。ありがとう。

答えて

0
According to my understand you are using JSON Array, use iteration 

CREATE PROCEDURE `Manipulation_Json_Data`() 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
    BEGIN 
    DECLARE v1 INT DEFAULT 0; 

    SET @j = '[{"LCM": {"id": 333, "barcode": "ABC"}, "DCover": {"id": 444, "barcode": "CDE"}, "date_associated": "2017-11-27 23:59:59"}, {"LCM": {"id": 555, "barcode": "EFG"}, "DCover": {"id": 666, "barcode": "GHI"}, "date_associated": "2017-11-27 23:59:59"}, {"LCM": {"id": 777, "barcode": "IJK"}, "DCover": {"id": 888, "barcode": "KLM"}, "date_associated": "2017-11-27 23:59:59"}]'; 

    WHILE v1 < 4 DO 
    SET @data_v = JSON_EXTRACT(@j, concat('$[',v1,']')); 
    INSERT INTO database.table_name (`ID`, `Text`) VALUES (NULL, @data_v); 
    SET v1 = v1 + 1; 
    END WHILE; 
    END 
+0

これは純粋にMySQLで行われますか?目標は完全にMySQL(データベースサーバー)でそれを行うことですので、 – Nii

+0

更新された答えを確認してください。 1. "LCM":{"id":333、 "barcode": "ABC"}、 "DCover":{"id":444、 "barcode": "CDE"}、 {"id":555、 "barcode": "EFG"}、 "DCover":{"id": "date_associated": "2017-11-27 23:59:59"} "LCM":{"id":777、 "barcode": "IJK"、 "barcode": "GHI"}、 "date_associated": "2017-11-27 23:59:59"} 3. { }、 "DCover":{"id":888、 "barcode": "KLM"}、 "date_associated": "2017-11-27 23:59:59"} –

+0

uhm、サーバー側のソリューション。言語特有のものではありません。 – Nii

関連する問題