当我读取JSON数据时-

查询样例:

SELECT *
FROM
  JSON_TABLE(
          CONCAT('[', '351615,12345678', ']'),
          "$[*]"
          COLUMNS(
              ids BIGINT(20) PATH "$"
              )
      ) AS tt


错误:


  “在数组元素后缺少逗号或']'。”在位置2。


当我删除整数前面的00时,它给出了正确的结果。

SELECT *
FROM
  JSON_TABLE(
          CONCAT('[', '351615,12345678', ']'),
          "$[*]"
          COLUMNS(
              ids BIGINT(20) PATH "$"
              )
      ) AS tt


输出:

351615
12345678


有人可以建议我我所缺少的吗?

最佳答案

您可以使用JSON_ARRAY代替concat一个字符串来获取JSON数组值:

-- single value
SELECT *
FROM JSON_TABLE(
  JSON_ARRAY('00351615'),
  "$[*]"
  COLUMNS(
    ids BIGINT(20) PATH "$"
  )
) AS tt

-- multiple values
SELECT *
FROM JSON_TABLE(
  JSON_ARRAY('00351615', '12345678'),
  "$[*]"
  COLUMNS(
    ids BIGINT(20) PATH "$"
  )
) AS tt


...或者您使用"转义该值:

-- single value
SELECT *
FROM JSON_TABLE(
  CONCAT('[', '"00351615"', ']'),
  "$[*]"
  COLUMNS(
    ids BIGINT(20) PATH "$"
  )
) AS tt

-- multiple values
SELECT *
FROM JSON_TABLE(
  CONCAT('[', '"00351615","12345678"', ']'),
  "$[*]"
  COLUMNS(
    ids BIGINT(20) PATH "$"
  )
) AS tt


您还可以使用JSON_VALID检查JSON值是否有效:

SELECT JSON_VALID(CONCAT('[', '00351615', ']')) -- 0 (not valid)


demo on dbfiddle.uk

10-06 01:30