代码之家  ›  专栏  ›  技术社区  ›  chris01

带有MariaDB的JSON_QUERY

  •  0
  • chris01  · 技术社区  · 1 年前

    我尝试将MariaDB与JSON一起使用。

    CREATE TABLE t (j LONGTEXT);
    
    INSERT INTO t (j) VALUES ('{"a":"1"}');
    
    INSERT INTO t (j) VALUES ('{"a":"2"}');
    
    SELECT * FROM t WHERE JSON_VALUE(j,'$.a') = "1";
    +-----------+
    | j         |
    +-----------+
    | {"a":"1"} |
    +-----------+
    
    SELECT * FROM t WHERE JSON_VALUE(j,'$.a') = "2";
    +-----------+
    | j         |
    +-----------+
    | {"a":"2"} |
    +-----------+
    

    从这里开始,它就像一种魅力。

    但现在我没想到会这样。

    SELECT JSON_QUERY(j, "$.a") AS a FROM t;
    +------+
    | a    |
    +------+
    | NULL |
    | NULL |
    +------+
    

    我本以为会这样。

    +------+
    | a    |
    +------+
    | "1"  |
    | "2"  |
    +------+
    

    我哪里错了??

    1 回复  |  直到 1 年前
        1
  •  1
  •   SelVazi    1 年前

    JSON_VALUE 返回标量值,而 JSON_QUERY 返回一个对象或数组:

    SELECT JSON_QUERY('{"a":"1"}', '$.a'); -- Returns NULL because "1" is a scalar value
    

    但是,如果这些值是对象或数组,它们将按原样返回:

    SELECT JSON_QUERY('{"key1":[1,2], "key2": {"a": 5}}', '$.key1'); -- Return [1,2] 
    
    SELECT JSON_QUERY('{"key1":[1,2], "key2": {"a": 5}}', '$.key2'); -- Return {"a": 5}