【问题标题】:How to store a key and value in a table from a JSON object in MySQL如何在 MySQL 中的 JSON 对象中将键和值存储在表中
【发布时间】:2019-12-26 10:47:06
【问题描述】:

我有一个 MySQL 数据库表,即 ds_message 和 ds_params,它的表 ds_message 在每一行中都包含一个 JSON 对象。我想通过引用 ds_message 主键 id 将 JSON 对象的键和值存储到所有记录的表 ds_params 中

表:ds_message

_____________________________________________________________________________________
id  key_value
_____________________________________________________________________________________
1  '{"a":"John", "b":"bat", "c":"$10"}'
2  '{"i":"Emma", "j":"Jam"}'

我需要将 key_value 插入到另一个表中,例如

_________________________________________________
id   message_id    json_key    json_value
_________________________________________________
1    1             'a'         'John'
2    1             'b'         'bat'
3    1             'c'         '$10'
4    2             'i'         'Emma'
5    2             'j'         'Jam'

表结构:

CREATE TABLE `ds_message` (
  `id` int NOT NULL,
  `key_value` varchar(500) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='';

ALTER TABLE `ds_message`
  ADD PRIMARY KEY (`id`);

INSERT INTO `ds_message` (`id`, `key_value`) VALUES
(1, '{"a":"John", "b":"bat", "c":"$10"}');

INSERT INTO `ds_message` (`id`, `key_value`) VALUES
(2, '{"i":"Emma", "j":"Jam"}');

CREATE TABLE `ds_params` (
  `id` int NOT NULL,
  `message_id` int NOT NULL,
  `json_key` varchar(500) NOT NULL,
  `json_value` varchar(500) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='';

ALTER TABLE `ds_params`
  ADD PRIMARY KEY (`id`);

请帮助我如何实现这一点,它可能是一个简单的 select cum insert 语句或以优化方式存储过程。

【问题讨论】:

  • 您需要拆分 JSON 并在后端以编程方式一一插入。您使用 PHP 作为后端?
  • @AdlanArifZakaria 我使用 Java 作为后端,但我需要 MySQL 而不是 Java 中的解决方案。

标签: mysql json key-value mysql-json


【解决方案1】:

使用MySql JSON 函数。以下信息将帮助您编写一个存储过程,从ds_message 填充表key_value

  1. 要获取对象的键数组,请使用json_keys

     SELECT JSON_keys('{"foo": 1, "bar": 2}')
    
  2. 你可以使用一个键来获取每个属性的值

     SELECT JSON_EXTRACT('{"foo": 1, "bar": 2}', '$.foo');
    
  3. 使用嵌套循环迭代ds_message记录,并使用上述方法迭代每个json对象。为每个对象中的每个键插入一条记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 2011-06-30
    • 2013-07-18
    • 2023-03-09
    • 2021-07-21
    • 2010-10-20
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多