【问题标题】:I need to replace the character \\ of a string and read with JSON_EXTRACT我需要替换字符串的字符 \\ 并使用 JSON_EXTRACT 读取
【发布时间】:2019-08-19 04:27:15
【问题描述】:

当使用 JSON.stringify 在 Mysql 中保存 JSON 对象时,它会将字符“\”放入字符串中。我正在构建一个 VIEW,我需要用 json_extract 分隔数据,因为我使用了 MySql REPLACE 命令但返回为 null。

已编辑

字段“DADOS”中的 JSON (LONGTEXT)

{  
   "pessoal":"[{\"nome\":\"Marie Luiza Novaes\",\"nascimento\":\"1994-06-20\",\"civil\":\"Casado(a)\",\"sexo\":\"F\",\"rg\":\"469326293\",\"cpf\":\"06649073504\"}]",
   "contato":[],
   "interesse":[],
   "adicional":[],
   "profissional":[],
   "academico":[],
   "anotacoes":[],
   "extras":"[]"
}

1 - 获取姓名

SELECT
  json_extract (REPLACE(dados,'\\"','"'), '$.pessoal[0].nome') dados
FROM
  cadastro    

2 - 获取姓名

SELECT
  json_extract (REPLACE(dados,'\\',''), '$.pessoal[0].nome') dados
FROM
  cadastro

TEST

【问题讨论】:

  • 那个反斜杠只是一个人工制品,表示转义为\"的双引号只是literal双引号。 不要'尝试删除反斜杠,因为它在 JSON 中并不存在。
  • 我试过没有 REPLACE 结果还是空

标签: mysql json


【解决方案1】:

我发现您当前的方法存在多个问题。首先,您的列中的 JSON 文字似乎有些格式不正确。 JSON 数组不带双引号,因为它是 JSON 结构的一部分。其次,您使用的 JSON 路径语法也关闭了。以下确切设置对我有用:

WITH cadastro AS (
    SELECT '{"pessoal":[{"nome":"Marie Luiza Novaes","nascimento":"1994-06-20","civil":"Casado(a)","sexo":"F","rg":"469326293","cpf":"06649073504"}],
        "contato":[],
        "interesse":[],
        "adicional":[],
        "profissional":[],
        "academico":[],
        "anotacoes":[],
        "extras":[]}' AS dados
)

SELECT
    JSON_EXTRACT(dados, '$.pessoal[0].nome') dados
FROM cadastro;

Demo

这个查询的输出是"Marie Luiza Novaes"

【讨论】:

  • 我根据您的示例进行了编辑,现在使用了我在该领域的完整数据,但它仍然无法正常工作
  • 为什么有人已经回答了你就换了问题?
  • 对不起,蒂姆,你的例子确实有效,但我忘记了其余的数据,这导致我编辑并再次请求你的帮助。
  • @alebarros 我更新了我的答案。这将是我在这里的最后一次更新,所以我希望它符合您的期望。
猜你喜欢
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多