Jump to content

Recommended Posts

Здравствуйте, появилась необходимость перевести json массив в таблицу mysql, в интернете искал не как не мог найти, навыков не хватает с работай в этой области поэтому прошу вашу помощь. Имеется массив http://jsonviewer.stack.hu/#http://hearthstoneapi.com/cards/findAll нужно переместить в базу с точно такими же колонками (set, quality ... id).

Link to post
Share on other sites

Есть вопрос? Задай его профессиональным веб-мастерам, SEO и другим специалистам!

@wasex, я знаю как это реализовать, но как записать в коде не знаю.

1) Перевести json в php массив.

2) Подключится к базе и выбрать таблицу.

3) Цикл на добавление передавая параметры столбца (т.к. они не всегда есть).

Link to post
Share on other sites

<?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

http://ufa-nova.ru/json.sql.zip оказалось даже быстрее чем за пару часов.

 Тебе нужно скачать этот файл себе на компьютер

 

Далее заходишь в phpmyadmin в свою базу данных и нажимаешь кнопку импорт выбираешь этот файл и вауля таблица готова.

Link to post
Share on other sites

@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

@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;
      
}
?> 

Он работает, но не совсем корректно.

 

02939de59265.jpg

4664c701d86e.jpg
Link to post
Share on other sites

Не видно скриншоты, если количество вставленных меньше, чем массив - то проблемма в ', т.к. у вас название передается прямо в запрос, без подготовки, и если в json будет ', он сломается..

Если больше, т.е. повторы, то нужно сделать уникальный ключ в таблице.

Link to post
Share on other sites

@shift196, проблема том, что id находится в самом конце массива, а те элементы которые имеют меньшее количество строк не добавляются. Если в $php_array сделать так, чтобы поле id встало на первое место, то проблема решится.

Link to post
Share on other sites

@shift196, проблема том, что id находится в самом конце массива, а те элементы которые имеют меньшее количество строк не добавляются. Если в $php_array сделать так, чтобы поле id встало на первое место, то проблема решится.

2 и 3 элемент имеют

    "durability": 2,    "race": 23,

А У тебя их нет в таблице, ошибка в этом

Link to post
Share on other sites

@shift196, я бред написал. Просто только учу, а для написании своей cms требуются знания sql. Добавил поля заработало. Спасибо огромное!

Код не айс конечно, особенно mysql_*..

Если что, пиши в ЛС, помогу, все равно делать нехер..

Link to post
Share on other sites

@shift196, код нужен буквально на несколько таблиц, которые будут потом связаны. В дальнейшем на проекте код не будет использоваться (но он мне ещё пригодится).

Link to post
Share on other sites
  • 3 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...