Парсинг JSON в SQL и последующее обновление

252
21 сентября 2017, 17:12

Всем добрый день. Есть сервис который работает с файлом в json формате. Это выгрузка, которая прилетает ко мне ежедневно. Хочу перевести это в sql формат средствами php, но не могу придумать механизм, который бы это дело перевёл в таблицу. Я так понимаю сначала его надо спарсить а потом что-то типа: $query = "insert into test values (NULL, '$text')"; А самое сложное, что вызывает вопрос, как обновлять значения уже имеющейся базы на основе json файла.

<!-- содежимое test.json -->
[
    {
        "ID": "000000001",
        "Obj": "Данные об объекте 1",
        "proc_gotov": "100",
        "vvod": "01.10.2017",
        "current": "В процессе"
    },
    {
        "ID": "000000001",
        "Obj": "Данные об объекте 1",
        "proc_gotov": "100",
        "vvod": "01.11.2017",
        "current": "В процессе"
    },
    {
        "ID": "000000001",
        "Obj": "Данные об объекте 1",
        "proc_gotov": "100",
        "vvod": "01.12.2017",
        "current": "В процессе"
    },
    {
        "ID": "000000002",
        "Obj": "Данные об объекте 2",
        "proc_gotov": "10",
        "vvod": "01.05.2018",
        "current": "В процессе"
    },
    {
        "ID": "000000002",
        "Obj": "Данные об объекте 2",
        "proc_gotov": "10",
        "vvod": "01.05.2018",
        "current": "В процессе"
    },
    {
        "ID": "000000003",
        "Obj": "Данные об объекте 3",
        "proc_gotov": "100",
        "vvod": "01.12.2016",
        "current": "Готов"
    },
    {
        "ID": "000000003",
        "Obj": "Данные об объекте 3",
        "proc_gotov": "100",
        "vvod": "01.12.2016",
        "current": "Готов"
    },
    {
        "ID": "000000003",
        "Obj": "Данные об объекте 3",
        "proc_gotov": "100",
        "vvod": "01.12.2016",
        "current": "Готов"
    }
]
Answer 1

Воспользуйтесь SELECT * FROM OPENJSON(@json).

Вот здесь очень хорошо описано: https://docs.microsoft.com/ru-ru/sql/relational-databases/json/json-data-sql-server

Answer 2
$db = new mysqli(...);
$data = json_decode($json);
$stmt = $db->prepare("INSERT INTO table (id, obj, proc, vvod, current) VALUES (?,?,?,?,?) ON DUPLICATE KEY UPDATE SET proc_gotov=?");
$row = $data[0];
$stmt->bind_values("ssisss", $row['ID'], $row['Obj'], $row['proc_gotov'], $row['vvod'], $row['current'], $row['proc_gotov']);
foreach($data as $row){
    $stmt->execute();
}
READ ALSO
file_get_contents time out

file_get_contents time out

file_get_contents в какой то из версий php имеет проблему с закрытием подключений

158
Помогите , я в замешательстве [требует правки]

Помогите , я в замешательстве [требует правки]

json_decode('{"status":false,"message":"Site not found"}'); Что тут не так?

149
Проблема с отправкой формы на телеграм и почту одновременно

Проблема с отправкой формы на телеграм и почту одновременно

Здравствуйте изначально был вот такой код для отправки данных с форм на email и он прекрасно работал

233
обработка чекбоксов с записью в бд - PHP БД

обработка чекбоксов с записью в бд - PHP БД

На странице есть форма для пользователя со списком видов работ (чекбоксы)Пользователь может выбрать одно или несколько значений

209