簡體   English   中英

如何在MySQL中搜索嵌套的JSON

[英]How to search nested JSON in MySQL

我正在使用 MySQL 5.7+ 和本機 JSON 數據類型。 樣本數據:

[
  {
    "code": 2,
    "stores": [
      {
        "code": 100,
        "quantity": 2
      },
      {
        "code": 200,
        "quantity": 3
      }
    ]
  },
  {
    "code": 4,
    "stores": [
      {
        "code": 300,
        "quantity": 4
      },
      {
        "code": 400,
        "quantity": 5
      }
    ]
  }
]

問題:如何提取code = 4的數組?

以下(工作)查詢具有我要提取的數據的 position 和硬編碼的搜索條件:

SELECT JSON_EXTRACT(data_column, '$[0]') 
FROM   json_data_table
WHERE  data_column->'$[1].code' = 4

我嘗試使用通配符 ( data_column->'$[*].code' = 4 ) 但我沒有得到任何結果。

SELECT row FROM 
(
    SELECT data_column->"[*]" as row
    FROM   json_data_table
    WHERE  4 IN JSON_EXTRACT(data_column, '$[*].code')
) 
WHERE row->".code" = 4

...雖然如果這不是頂級的未索引對象數組,這將更容易使用。 您可能需要考慮對架構進行一些調整。

注意:

如果您的數據中有多行,指定"$[i]"將選擇該行,而不是它的聚合。 對於您的數據集, "$[1].code"將始終評估為該單行中code的值。

基本上,你是在說:

  1. $ json 集合
  2. [1]集合中的第二個對象。
  3. .code屬性標記為“代碼”。

...因為該查詢只會有一個匹配項,所以它總是 eval 為 4 ...

  1. WHERE 4 = 4

如果可能,替代數據結構

既然“代碼”的全部目的是作為一把鑰匙,那就讓它成為鑰匙。

[
  "code2":{
    "stores": [
      {
        "code": 100,
        "quantity": 2
      },
      {
        "code": 200,
        "quantity": 3
      }
    ]
  },
  "code4": {
    "stores": [
      {
        "code": 300,
        "quantity": 4
      },
      {
        "code": 400,
        "quantity": 5
      }
    ]
  }
]

那么,它所需要的只是:

SELECT datacolumn->"[code4]" as code4
FROM json_data_table

如果要獲取 mysql 中的嵌套 json,則列中必須存在有效​​的 json。 那么你可以試試

JSON_EXTRACT(json_column,'$.level1.$level1.2') from table;

獲取完整示例

訪問完整代碼

這就是你要找的。

SELECT data_column->'$[*]' FROM json_data_table where data_column->'$[*].code' like '%4%'

從數組中選擇時,所選數據將有[]周圍,​​因此data_column->'$[*].code' = 4是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM