当前位置: 首页 > 面试题库 >

将MySQL中的JSON数组转换为行

况承福
2023-03-14
问题内容

更新: 现在可以在MySQL
8中通过JSON_TABLE函数:https ://dev.mysql.com/doc/refman/8.0/en/json-table-
functions.html

我喜欢MySQL 5.7中的新JSON函数,但是遇到了一个试图将JSON中的值合并到普通表结构中的块。

掌握JSON,从中处理和提取数组等都很简单。始终使用JSON_EXTRACT。但是从JSON数组到行的逆过程呢?也许我对现有的MySQL
JSON功能非常关注,但是我无法弄清楚这一点。

例如,假设我有一个JSON数组,想为数组中的每个元素插入一行及其值?我发现的唯一方法是编写一堆JSON_EXTRACT(…’$
[0]’)JSON_EXTRACT(…’$ [1]’)等并将它们结合在一起。

还是说我有一个JSON数组,并希望将GROUP_CONCAT()转换为单个逗号分隔的字符串?

换句话说,我知道我可以这样做:

SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, CONCAT('$[', x.n, ']'))) AS val
  FROM   
  (    
    SELECT 0 AS n    
    UNION    
    SELECT 1 AS n    
    UNION    
    SELECT 2 AS n    
    UNION    
    SELECT 3 AS n    
    UNION    
    SELECT 4 AS n    
    UNION    
    SELECT 5 AS n    
  ) x
WHERE x.n < JSON_LENGTH(@j);

但这伤了我的眼睛。还有我的心。

我该怎么做:

SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, '$[ * ]'))

…并把数组中的值与JSON数组本身连接在一起?

我猜我在这里寻找的是某种类似于JSON_SPLIT的代码:

SET @j = '[1, 2, 3]';

SELECT GROUP_CONCAT(val)
FROM
  JSON_SPLIT(JSON_EXTRACT(@j, '$[ * ]'), '$')

如果MySQL具有适当的STRING_SPLIT(val,’separator’)表返回函数,我可以破解它(逃避该死),但这也不可用。


问题答案:

这是在MySQL 8+中使用JSON_TABLE的方法:

SELECT *
     FROM
       JSON_TABLE(
         '[5, 6, 7]',
         "$[*]"
         COLUMNS(
           Value INT PATH "$"
         )
       ) data;

您还可以通过将分隔的字符串转换为JSON字符串,将其用作MySQL否则缺少的常规字符串拆分函数(类似于PG的regexp_split_to_table或MSSQL的STRING_SPLIT):

set @delimited = 'a,b,c';

SELECT *
     FROM
       JSON_TABLE(
         CONCAT('["', REPLACE(@delimited, ',', '", "'), '"]'),
         "$[*]"
         COLUMNS(
           Value varchar(50) PATH "$"
         )
       ) data;


 类似资料:
  • 问题内容: 我有一个包含几个整数的数组。我已经向数组添加了一些值,但是现在我需要通过jQuery的方法将此数组发送到页面。如何将其转换为JSON对象进行发送? 问题答案: 向后兼容的脚本:https : //github.com/douglascrockford/JSON- js/blob/master/json2.js 并致电: 注意: JSON对象现在是大多数现代Web浏览器(IE 8及更高版

  • 问题内容: 我有一个想要转换为纯JavaScript数组的json数组: 这是我的json数组: 如何将其转换为普通的javascript数组,如下所示: 问题答案: 已经是JS对象(不是JSON)。但是,您可以在这里: 编辑:将 元素插入数组中的正确位置。谢谢@RoToRa 也许一开始不创建此类对象会更容易。它是如何创建的?

  • 问题内容: myArray是: 我想将其转换为JSON,例如: 我试过了: 但这正在返回: 问题答案: 您的问题是非顺序索引。 Php数组必须具有要编码为JSON数组的索引。 您可以使用array_values重置数组键:

  • 问题内容: 我有一个包含几个整数的数组。我已经向数组添加了一些值,但是现在我需要通过jQuery的方法将此数组发送到页面。如何将其转换为JSON对象进行发送? 问题答案: 并致电: 注意: _JSON对象现在是大多数现代Web浏览器(IE 8及更高版本)的一部分。

  • 问题内容: 有谁知道如何将包含json的字符串转换为C#数组。我有这个从webBrowser读取text / json并将其存储到字符串中。 只需要以某种方式将json字符串更改为数组即可。一直在查看Json.NET,但是我不确定那是否是我所需要的,因为我不想将数组更改为json。但是反过来。谢谢您的帮助! 问题答案: 只需使用字符串并使用JavaScriptSerializer将其反序列化为本地

  • 本文向大家介绍PHP 将JSON转换为数组,包括了PHP 将JSON转换为数组的使用技巧和注意事项,需要的朋友参考一下 json_decode函数可以如下所示使用- 以下代码行可用于将JSONL转换为数组格式- 一种替代方法是使用以下代码,其中已定义json_string的方式发生了变化- 示例 输出结果 这将产生以下输出-