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(), тоже не помогло
  • Вопрос задан
  • 770 просмотров
Решения вопроса 1
vaflya
@vaflya Автор вопроса
Ничего личного, это всего лишь хобби.
Ответ таков: если в JSON массиве используется одинарная кавычка [ ' ] то json_decode() не переваривает этот массив
тогда меняем все одинарные кавычки на двойные

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


и все в порядке, спасибо всем кто ответил.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
если это надо сделать 1 раз, имхо нет смысла заморачиваться и проще через пых все вбить.
если чисто интересно потрахаться через мускуль - https://dev.mysql.com/doc/refman/8.0/en/json-attri...
Ответ написан
MvcBox
@MvcBox
Back-end developer
С версии 5.7 MySQL умеет работать с JSON, но настолько убого, что лучше этот фунционал не использовать.
Например, JSON поля не индексируются. Если хотите нормальную поддержку JSON, то мигрируйте на PostgreSQL.
Ответ написан
Ваш ответ на вопрос

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

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