За последние 24 часа нас посетили 59589 программистов и 1741 робот. Сейчас ищут 913 программистов ...

json, mysql

Тема в разделе "PHP для новичков", создана пользователем buromax, 27 дек 2017.

  1. buromax

    buromax Новичок

    С нами с:
    23 окт 2017
    Сообщения:
    7
    Симпатии:
    0
    Доброе утро!
    Хочу попросить помощи в следующем вопросе -
    есть строка json такого формата:
    Код (Text):
    1. {"report":"fullnews","id":"01603b5c5c6feb41a408c80a1852a49","objects":[{"number":"1123","message":"Text","date":"1541934682"},{"number":"1111","message":"Text","date":"1541934682"}]}
    Мне нужно импортировать в бд эти данные. Никак не соображу..
    Прошу ткнуть носом
    не могу именно понять как мне разделить
    Код (Text):
    1. {"number":"1123","message":"Text","date":"1541934682"}
    и
    Код (Text):
    1. {"number":"1111","message":"Text","date":"1541934682"}
    с данным id , что бы их построчно занести в бд
    Код (Text):
    1. id | number | message| date
    objects[0]->.. не подходит.. так, как данных может быть 200+, точное количество не известно
     
    #1 buromax, 27 дек 2017
    Последнее редактирование: 27 дек 2017
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @buromax, предложенная строка декодируется функцией json_decode в следующий объект:
    Код (Text):
    1. object(stdClass)[1]
    2.   public 'report' => string 'fullnews' (length=8)
    3.   public 'id' => string '01603b5c5c6feb41a408c80a1852a49' (length=31)
    4.   public 'objects' =>
    5.     array (size=2)
    6.       0 =>
    7.         object(stdClass)[2]
    8.           public 'number' => string '1123' (length=4)
    9.           public 'message' => string 'Text' (length=4)
    10.           public 'date' => string '1541934682' (length=10)
    11.       1 =>
    12.         object(stdClass)[3]
    13.           public 'number' => string '1111' (length=4)
    14.           public 'message' => string 'Text' (length=4)
    15.           public 'date' => string '1541934682' (length=10)
    В чем заключается проблема?
    Надо импортировать в абстрактную БД, или есть база с определенной структурой?
    Какая СУБД используется?
     
  3. buromax

    buromax Новичок

    С нами с:
    23 окт 2017
    Сообщения:
    7
    Симпатии:
    0
    обновил шапку..
    Код (Text):
    1. Тип сервера: MySQL
    2. Версия сервера: 5.6.31 - MySQL Community Server
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    подготовленным запросом с метками, крутить в цикле execute с данными. Каким расширением вы пользуетесь для подключения к бд ?
     
  5. buromax

    buromax Новичок

    С нами с:
    23 окт 2017
    Сообщения:
    7
    Симпатии:
    0
    mysqli
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Вот, например:
    PHP:
    1. $str = '{"report":"fullnews","id":"01603b5c5c6feb41a408c80a1852a49","objects":[{"number":"1123","message":"Text","date":"1541934682"},{"number":"1111","message":"Text","date":"1541934682"}]}';
    2. $obj = json_decode($str);
    3. foreach($obj->objects as $item) {
    4.     echo $item->number;
    5.     echo ', '.$item->message;
    6.     echo ', '.$item->date;
    7.     echo '<br>';
    8. }
    --- Добавлено ---
    Для этого можно создать две таблицы. Одна - данные о "глобальном объекте", с его id и report; другая - данные из objects (obj_id, number, message, date), где obj_id - внешний ключ === id из первой таблицы.
    Для второй таблицы - уникальный индекс (или первичный ключ) по obj_id и number.
     
    buromax нравится это.
  7. buromax

    buromax Новичок

    С нами с:
    23 окт 2017
    Сообщения:
    7
    Симпатии:
    0
    Да такой вариант подходит.. хочу Вас попросит набросать хоть наглядно как реализовать данный вариант, если не трудно..
    вторые сутки пытаюсь сам..
     
  8. buromax

    buromax Новичок

    С нами с:
    23 окт 2017
    Сообщения:
    7
    Симпатии:
    0
    Все, победил сам! Спасибо всем!
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    PHP:
    1. Lerma::prepare( 'INSERT .... ( ?,?,? )', json_decode ( $json, 1 )['objects'] );
     
  10. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    PHP:
    1. json_decode($json, true)
    Второй параметр сделает из JSON массив.

    Пруф: Если TRUE, возвращаемые объекты будут преобразованы в ассоциативные массивы.
    Сылка: https://php.ru/manual/function.json-decode.html