WQP 360 Posted May 8, 2014 Report Share Posted May 8, 2014 Здравствуйте, появилась необходимость перевести json массив в таблицу mysql, в интернете искал не как не мог найти, навыков не хватает с работай в этой области поэтому прошу вашу помощь. Имеется массив http://jsonviewer.stack.hu/#http://hearthstoneapi.com/cards/findAll нужно переместить в базу с точно такими же колонками (set, quality ... id). Link to post Share on other sites
wasex 4 Posted May 8, 2014 Report Share Posted May 8, 2014 Вам нужно написать php скрипт которым нужно спарсить данный массив и запихнуть в базу. Делов на пару часов. Link to post Share on other sites
WQP 360 Posted May 8, 2014 Author Report Share Posted May 8, 2014 @wasex, я знаю как это реализовать, но как записать в коде не знаю. 1) Перевести json в php массив. 2) Подключится к базе и выбрать таблицу. 3) Цикл на добавление передавая параметры столбца (т.к. они не всегда есть). Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 <?php$data = file_get_contents("адрес json");$json = json_decode($data);$db = new PDO.....foreach($json as $element) {$query = $db->prepare('INSERT INTO `table`(`id`, `set`, `type`...) VALUES(:id, :set, :type...);'); foreach($element as $key => $value) {$query->bindValue(':' . $key, $value);}$query->execute();} Link to post Share on other sites
wasex 4 Posted May 8, 2014 Report Share Posted May 8, 2014 http://ufa-nova.ru/json.sql.zip оказалось даже быстрее чем за пару часов. Тебе нужно скачать этот файл себе на компьютер Далее заходишь в phpmyadmin в свою базу данных и нажимаешь кнопку импорт выбираешь этот файл и вауля таблица готова. WQP 1 Link to post Share on other sites
WQP 360 Posted May 8, 2014 Author Report Share Posted May 8, 2014 @wasex, если вам не трудно покажите код, а то выше вас пользователь написал и он по какой-то причине не работает. <?php $json = json_decode(file_get_contents('http://hearthstoneapi.com/cards/findAll')); $db = new PDO('mysql:host=localhost;dbname=apanel', 'root', ''); foreach($json as $element) { $query = $db->prepare('INSERT INTO `cards`(`id`, `set`, `type`) VALUES(:id, :set, :type);'); foreach($element as $key => $value) { $query->bindValue(':' . $key, $value); } $query->execute($json); } ?> Мне по сути не сама база нужна, как решение как сделать т.к. ещё понадобится. Link to post Share on other sites
wasex 4 Posted May 8, 2014 Report Share Posted May 8, 2014 К содалению я теперь только в понедельник смогу скинуть код Link to post Share on other sites
WQP 360 Posted May 8, 2014 Author Report Share Posted May 8, 2014 @wasex, печально... если что пишите. Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 Сделай выводforeach($json as $element) {var_dump($element); Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 и после $query->execute(); НЕ $query->execute($json); (аргумент не нужен)Напиши var_dump($query->errorInfo());будешь знать в чем ошибка Link to post Share on other sites
WQP 360 Posted May 8, 2014 Author Report Share Posted May 8, 2014 @shift196, есть код <?php $json_array = file_get_contents('http://hearthstoneapi.com/cards/findAll'); mysql_connect("localhost", "root", ""); mysql_select_db("apanel"); $php_array = json_decode( $json_array , true ); if (!is_array($php_array)) die('Json convert error'); foreach ( $php_array as $array_element) { $fields = array(); $values = array(); foreach ($array_element as $field_name => $field_value) { $fields[] = $field_name; $values[] = $field_value; } $values = array_map('addslashes', $values); $mysql_query = mysql_query("insert into `card` (`".join( '`,`',$fields). "`) values ('".join( "','",$values)."')"); echo $mysql_query; } ?> Он работает, но не совсем корректно. Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 Не видно скриншоты, если количество вставленных меньше, чем массив - то проблемма в ', т.к. у вас название передается прямо в запрос, без подготовки, и если в json будет ', он сломается..Если больше, т.е. повторы, то нужно сделать уникальный ключ в таблице. Link to post Share on other sites
WQP 360 Posted May 8, 2014 Author Report Share Posted May 8, 2014 @shift196, проблема том, что id находится в самом конце массива, а те элементы которые имеют меньшее количество строк не добавляются. Если в $php_array сделать так, чтобы поле id встало на первое место, то проблема решится. Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 @shift196, проблема том, что id находится в самом конце массива, а те элементы которые имеют меньшее количество строк не добавляются. Если в $php_array сделать так, чтобы поле id встало на первое место, то проблема решится. 2 и 3 элемент имеют "durability": 2, "race": 23, А У тебя их нет в таблице, ошибка в этом WQP 1 Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 Зайти в структуру и создай поля durability, race WQP 1 Link to post Share on other sites
WQP 360 Posted May 8, 2014 Author Report Share Posted May 8, 2014 *Написал бред* Спасибо! Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 @shift196, нужно поставить NULL, но выдаёт ошибку #1067 - Invalid default value for 'durability' Какой тип поля durability? Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 Если всегда INTEGER, то сделай стандартное значение 0 Link to post Share on other sites
WQP 360 Posted May 8, 2014 Author Report Share Posted May 8, 2014 @shift196, я бред написал. Просто только учу, а для написании своей cms требуются знания sql. Добавил поля заработало. Спасибо огромное! Link to post Share on other sites
shift196 67 Posted May 8, 2014 Report Share Posted May 8, 2014 @shift196, я бред написал. Просто только учу, а для написании своей cms требуются знания sql. Добавил поля заработало. Спасибо огромное! Код не айс конечно, особенно mysql_*.. Если что, пиши в ЛС, помогу, все равно делать нехер.. Link to post Share on other sites
WQP 360 Posted May 8, 2014 Author Report Share Posted May 8, 2014 @shift196, код нужен буквально на несколько таблиц, которые будут потом связаны. В дальнейшем на проекте код не будет использоваться (но он мне ещё пригодится). Link to post Share on other sites
ryan88 0 Posted August 7, 2017 Report Share Posted August 7, 2017 Я думаю, это может помочь: JSON Formatter Link to post Share on other sites
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now