vaflya
@vaflya
Ничего личного, это всего лишь хобби.

Как распарсить JSON в MYSQL?

Добрый день, есть 2 таблицы:

№1 films -> id, title, summary

№2 donor -> field,...., data

вот в таблице donor, в последнем поле содержится информация о фильме в виде json массива

к примеру:

{'title': 'Женись на мне, чувак', 'title_en': 'Épouse-moi mon pote', 'year': 2017, 'tagline': 'Дружба - настоящая. Брак - фиктивный', 'description': 'Единственный шанс для провалившего экзамен студента остаться в Париже – это фиктивный брак. Однако, найти невесту так быстро практически невозможно. И тогда на помощь приходит лучший друг.', 'poster_url': 'https://st.kp.yandex.net/images/film_iphone/iphone360_999563.jpg', 'duration': 92, 'countries': ['Франция'], 'genres': ['комедия'], 'kinopoisk_rating': 6.6, 'kinopoisk_votes': 5762, 'imdb_rating': 6.1, 'imdb_votes': 2150, 'premiere_ru': '2017-11-09', 'premiere_world': '2017-10-25', 'minimal_age': 18, 'actors': ['Тарек Будали', 'Филипп Лашо', 'Шарлотта Габрис', 'Анди', 'Давид Марсе', 'Жюльен Аррути', 'Байа Белаль', 'Филипп Дюкен', 'Зинедин Суалем', 'Дуду Маста'], 'directors': ['Тарек Будали'], 'producers': ['Кристоф Сервони', 'Марк Фисцман', 'Кристиан Бомар'], 'writers': ['Тарек Будали', 'Пьер Дудан'], 'composers': ['Максим Депре', 'Мишель Торджман'], 'editors': ['Антуан Варей'], 'designers': ['Сэмюэл Тессер', 'Тьерри Пулет', 'Тьерри Руксель'], 'operators': ['Антуан Марто']}


мне нужно раскидать эти данные по таблице films

подскажите каким образом это можно сделать, или mysql не сможет работать с JSON и нужно парсить через PHP?

Через php сделал кустарно так:
for ($i=0; $i < 39553; $i++) { 
			$result = $this->db->query('SELECT `material_data`, `kinopoisk_id` FROM `x` WHERE `id` = '.$i.' LIMIT 1');

			while ($row = $result -> fetch ()) {
                                $pre = utf8_decode($row['material_data'])
				$json = json_decode($pre);

				if (!empty($json['description']) and !empty($row['kinopoisk_id'])) {
					$this->db->query('UPDATE `films` SET `summary` = '.$json['description'].' WHERE `kp_id` = '.$row['kinopoisk_id']);
				}

			}


		}


Странно но после декодирования массив с данными превращается в NULL NULL NULL NULL NULL
Проверил json-ы выборочно, все валидные
Добавил utf8_decode(), тоже не помогло
  • Вопрос задан
  • 1302 просмотра
Решения вопроса 1
vaflya
@vaflya Автор вопроса
Ничего личного, это всего лишь хобби.
Ответ таков: если в JSON массиве используется одинарная кавычка [ ' ] то json_decode() не переваривает этот массив
тогда меняем все одинарные кавычки на двойные

$prejson = str_replace('\'', '"', $row['material_data']);
				$json = json_decode($prejson, true);
				var_dump($json['description']);


и все в порядке, спасибо всем кто ответил.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
если это надо сделать 1 раз, имхо нет смысла заморачиваться и проще через пых все вбить.
если чисто интересно потрахаться через мускуль - https://dev.mysql.com/doc/refman/8.0/en/json-attri...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы