2016-08-11 13 views
0

JSON/MEMSQLに問題があります。ここに私のテーブルがあります:MEMSQLからJSONを読み取る

insert into MEMTEST (DATA) values 
(' 
{ 
    "EnterpriseMessage" : 
     { 
      "Body" : 
      [ 
       { 
        "AccountNumber":"ABCD", 
        "AdminCompany":null, 
        "BrokerNumber":"WWonka" 
       }, 
       { 
        "AccountNumber":"CSNE", 
        "AdminCompany":null, 
        "BrokerNumber":"ZWiza" 
       } 
      ], 
     "Header" : 
      { 
       "mimetye":"application/vnd.ms-powerpoint", 
       "destinationsystem":"ETL", 
       "requiresack":"FALSE", 
       "SimpArr": 
        [ 
         "BYTS6181", 
         "EVU98124", 
         "Genesys" 
        ], 
       "EmptyFile":1 
      } 
    } 

} 
'); 

私は、ヘッダー内SimpArr配列を読むことができます:

CREATE TABLE `MEMSQLPOLYGLOT` ( 
    ID BIGINT AUTO_INCREMENT, 
    `DATA` JSON NULL, 
    PRIMARY KEY (ID) 
); 

ここで私が読んしようとしているレコードがあります。

SELECT DATA::EnterpriseMessage::Header::SimpArr from MEMTEST; 

戻り値:

["BYTS6181","EVU98124","Genesys"] 

私も特定の値を取得するには、キーインデックスに渡すことができ、例えば:

select JSON_EXTRACT_JSON(DATA::EnterpriseMessage::Body, 1) from MEMTEST; 

それはだから、これはSimpArrの第二の値を返します0から始まるインデックス

私もボディ内のオブジェクトの配列を読み取ることができます。

その配列内の最初のオブジェクトを返します
select JSON_EXTRACT_JSON(DATA::EnterpriseMessage::Body, 0) from MEMTEST; 

{ 
    "AccountNumber":"ABCD", 
    "AdminCompany":null, 
    "BrokerNumber":"WWonka" 
} 

しかし、私が読んでする方法を見つけることができませんこのオブジェクトの個々の属性

誰もが考えている?

答えて

1

あなただけJSON_EXTRACT_JSONへの追加の引数としてキーを渡すことができます。

mysql> select JSON_EXTRACT_JSON(DATA::EnterpriseMessage::Body, 0, "AccountNumber") from MEMTEST; 
+----------------------------------------------------------------------+ 
| JSON_EXTRACT_JSON(DATA::EnterpriseMessage::Body, 0, "AccountNumber") | 
+----------------------------------------------------------------------+ 
| "ABCD"                | 
+----------------------------------------------------------------------+ 
1 row in set (0.08 sec) 

JSON_EXTRACT_JSONは、文字列キーまたは整数配列インデックスのどちらか、任意の数の引数を取ります。例えば、我々は、上記のあなたの例では::構文をアンロールすることができます

select JSON_EXTRACT_JSON(DATA, "EnterpriseMessage", "Body", 0, "AccountNumber") from MEMTEST; 

はまた、戻り値はそれで二重引用符を持っていることに注意してください。それはJSONを抽出し、文字列のJSON表現に二重引用符があるためです。実際に文字列を取得する場合は、JSON_EXTRACT_STRINGを使用してください。

mysql> select JSON_EXTRACT_STRING(DATA, "EnterpriseMessage", "Body", 0, "AccountNumber") from MEMTEST; 
+----------------------------------------------------------------------------+ 
| JSON_EXTRACT_STRING(DATA, "EnterpriseMessage", "Body", 0, "AccountNumber") | 
+----------------------------------------------------------------------------+ 
| ABCD                  | 
+----------------------------------------------------------------------------+ 
1 row in set (0.07 sec) 
+0

ありがとうございました!これは機能します。 – BamBam

関連する問題