Sign in to follow this  
Followers 0
WQP

json массив в mysql

22 posts in this topic

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

Share this post


Link to post
Share on other sites

Вам нужно написать php скрипт которым нужно спарсить данный массив и запихнуть в базу. Делов на пару часов.

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


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();
}

Share this post


Link to post
Share on other sites

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

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

 

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

WQP likes this

Share this post


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

Мне по сути не сама база нужна, как решение как сделать т.к. ещё понадобится.

Share this post


Link to post
Share on other sites

К содалению я теперь только в понедельник смогу скинуть код

Share this post


Link to post
Share on other sites

и после     $query->execute(); НЕ     $query->execute($json); (аргумент не нужен)
Напиши var_dump($query->errorInfo());
будешь знать в чем ошибка

 

Share this post


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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

WQP likes this

Share this post


Link to post
Share on other sites

@shift196, нужно поставить NULL, но выдаёт ошибку #1067 - Invalid default value for 'durability'

Какой тип поля durability?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.