Вставить вложенный объект JSON в столбец в mysql

#mysql #sql #node.js #insert #amazon-rds

#mysql #sql #node.js #вставить #amazon-rds

Вопрос:

У меня есть таблица MySQL (v 5.7), синтаксически оформленная как:

 CREATE TABLE risk_summary (
    u_id BINARY(16) PRIMARY KEY NOT NULL,
    calculation_time DATETIME NOT NULL,
    calculation_parameters NVARCHAR(4000) NOT NULL,
    comprehensive NVARCHAR(4000) NOT NULL
);
 

Мне нужно вставить данные в один столбец ( comprehensive ) в форме JSON. JSON, который мне нужно вставить в **comprehensive** столбец, это (пример):

         [
            {
                "label": "5/27/20",
                "date": "05-27-2020 19:07 UTC",
                "cat4_cnt": {
                    "stratus": "critical",
                    "count": 2
                },
                "cat3_cnt": {
                    "stratus": "high",
                    "count": 8
                },
                "cat2_cnt": {
                    "stratus": "moderate",
                    "count": 11
                },
                "cat1_cnt": {
                    "stratus": "low",
                    "count": 16
                },
                "cat0_cnt": {
                    "stratus": "unknown",
                    "count": 3
                },
                "median": 1.05
            },
            {
                "label": "Apr. 2019",
                "date": "04-27-2019 15:22 UTC",
                "cat4_cnt": {
                    "stratus": "critical",
                    "count": 4
                },
                "cat3_cnt": {
                    "stratus": "high",
                    "count": 3
                },
                "cat2_cnt": {
                    "stratus": "moderate",
                    "count": 15
                },
                "cat1_cnt": {
                    "stratus": "low",
                    "count": 12
                },
                "cat0_cnt": {
                    "stratus": "unknown",
                    "count": 0
                },
                "median": 1.25
            }
        ]
 

insert Для следующей операции SQL, которую я написал (используя AWS RDS query editor ):

 INSERT INTO Risk_Summary VALUES (UNHEX(REPLACE("6p9dbhica-56tg-471a-af27-31beb4b34bb2", "-","")),
    NOW(),
    "{a:1, b:2} ",
    "[{ "label": "5/27/20", "date": "05-27-2020 19:07 UTC", "cat4_cnt": "{ stratus: "critical", count: 2 }", "cat3_cnt": "{ stratus: "high", count: 8 }", "cat2_cnt": "{ stratus: "moderate", count: 11 }", "cat1_cnt": "{ stratus: "low", count: 16 }", "cat0_cnt": "{ stratus: "unknown", count: 3 }", "median": 1.05 }, { "label": "Apr. 2019", "date": "04-27-2019 15:22 UTC", "cat4_cnt": "{ stratus: "critical", count: 4 }", "cat3_cnt": "{ stratus: "high", count: 3 }", "cat2_cnt": "{ stratus: "moderate", count: 15 }", "cat1_cnt": "{ stratus: "low", count: 12 }", "cat0_cnt": "{ stratus: "unknown", count: 0 }", "median": 1.25 }]",
);
 

Но редактор запросов выдает ошибку: Cannot find parameter: 07 .

Я попробовал JSON тип данных в соответствии с документами MYSQL 5.7, но это также не работает для меня.

Если кто-нибудь может помочь через то же самое, высоко ценится 🙂

Комментарии:

1. Пока не знаю, что может вызвать это, но мы можем попытаться исправить проблемы, которые мы видим. У вас есть проблема. Вы не можете использовать двойные qoutes для qoute строки как внутренней, так и внешней. измените «[{ «метка»:….» на «[{ «метка»:…».

2. Я обновил всю строку, например: "[{ label: '5/27/20', date: '05-27-2020 19:07 UTC', cat4_cnt: "{ stratus: 'critical', count: 2 }", cat3_cnt: "{ stratus: 'high', count: 8 }", cat2_cnt: "{ stratus: 'moderate', count: 11 }", cat1_cnt: "{ stratus: 'low', count: 16 }", cat0_cnt: "{ stratus: 'unknown', count: 3 }', median: 1.05 }, { label: 'Apr. 2019', date: '04-27-2019 15:22 UTC', cat4_cnt: '{ stratus: 'critical', count: 4 }', .....]" , на которую он выдал новую ошибку Cannot find parameter: 22 , не уверен, связано ли это с date: '04-27-2019 15:22 UTC параметром в строке?

3. Отредактируйте вопрос с правильным форматированием, не публикуйте код в качестве комментария.

4. что подразумевается под «во ВСЕХ значениях»? В аргументах REPLACE(). В значение для calculation_parameters столбца.

5. dbfiddle.uk /… PS. JSON неверен — например, в этом фрагменте: "cat4_cnt": "{ stratus: "critical", count: 2 }", кавычки неправильно помещены за скобки объекта.