Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг данных (JSON / XML), Подскажите как правильно парсить данные 
:(
    Опции темы
Sice
Дата 20.5.2015, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Добрый день, друзья. Подскажите пожалуйста как правильнее парсить данные и как организовать цикл для вывода данных парсинга. 
Я обращаюсь на сайт, мне приходит ответ такого рода, если парсить в XML:
Код

<result>
<status>1</status>
<num_results>100</num_results>
<total_results>500</total_results>
<results_remaining>400</results_remaining>
<matches>
<match>
<match_id>1487575980</match_id>
<match_seq_num>1334122787</match_seq_num>
<start_time>1432118783</start_time>
<lobby_type>7</lobby_type>
<radiant_team_id>0</radiant_team_id>
<dire_team_id>0</dire_team_id>
<players>
<player>
<account_id>4294967295</account_id>
<player_slot>0</player_slot>
<hero_id>26</hero_id>
</player>
<player>
<account_id>22032060</account_id>
<player_slot>1</player_slot>
<hero_id>22</hero_id>
</player>
<player>
<account_id>24802150</account_id>
<player_slot>2</player_slot>
<hero_id>8</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>3</player_slot>
<hero_id>23</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>4</player_slot>
<hero_id>35</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>128</player_slot>
<hero_id>25</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>129</player_slot>
<hero_id>73</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>130</player_slot>
<hero_id>19</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>131</player_slot>
<hero_id>88</hero_id>
</player>
<player>
<account_id>138657453</account_id>
<player_slot>132</player_slot>
<hero_id>46</hero_id>
</player>
</players>
</match>
<match>
<match_id>1486500565</match_id>
<match_seq_num>1333203789</match_seq_num>
<start_time>1432069365</start_time>
<lobby_type>7</lobby_type>
<radiant_team_id>0</radiant_team_id>
<dire_team_id>0</dire_team_id>
<players>
<player>
<account_id>4294967295</account_id>
<player_slot>0</player_slot>
<hero_id>84</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>1</player_slot>
<hero_id>29</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>2</player_slot>
<hero_id>93</hero_id>
</player>
<player>
<account_id>97739429</account_id>
<player_slot>3</player_slot>
<hero_id>12</hero_id>
</player>
<player>
<account_id>157387016</account_id>
<player_slot>4</player_slot>
<hero_id>76</hero_id>
</player>
<player>
<account_id>81863485</account_id>
<player_slot>128</player_slot>
<hero_id>33</hero_id>
</player>
<player>
<account_id>48311512</account_id>
<player_slot>129</player_slot>
<hero_id>37</hero_id>
</player>
<player>
<account_id>67701328</account_id>
<player_slot>130</player_slot>
<hero_id>2</hero_id>
</player>
<player>
<account_id>22032060</account_id>
<player_slot>131</player_slot>
<hero_id>22</hero_id>
</player>
<player>
<account_id>24802150</account_id>
<player_slot>132</player_slot>
<hero_id>8</hero_id>
</player>
</players>
</match>
<match>
<match_id>1485822121</match_id>
<match_seq_num>1332607189</match_seq_num>
<start_time>1432046719</start_time>
<lobby_type>7</lobby_type>
<radiant_team_id>0</radiant_team_id>
<dire_team_id>0</dire_team_id>
<players>
<player>
<account_id>4294967295</account_id>
<player_slot>0</player_slot>
<hero_id>71</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>1</player_slot>
<hero_id>67</hero_id>
</player>
<player>
<account_id>103810932</account_id>
<player_slot>2</player_slot>
<hero_id>79</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>3</player_slot>
<hero_id>106</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>4</player_slot>
<hero_id>74</hero_id>
</player>
<player>
<account_id>22032060</account_id>
<player_slot>128</player_slot>
<hero_id>22</hero_id>
</player>
<player>
<account_id>24802150</account_id>
<player_slot>129</player_slot>
<hero_id>5</hero_id>
</player>
<player>
<account_id>128966659</account_id>
<player_slot>130</player_slot>
<hero_id>44</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>131</player_slot>
<hero_id>7</hero_id>
</player>
<player>
<account_id>4294967295</account_id>
<player_slot>132</player_slot>
<hero_id>61</hero_id>
</player>
</players>
</match>
</matches>


И так далее, таких <match> много. Подскажите как это правильно обработать ? Вывести в итоге каждый матч (<match>) в отдельной строке. 

И второй вопрос, как можно "заходить" во внутрь каждого матча (<match>) и вытаскивать данные оттуда в одном файле?
Чтобы в одном файле я отображал список этих самых матчей и некоторую индивидуальную информацию уже конкретно по каждому матчу ? 


Вот ответ сервера, если парсить через JSON
Код

{
    "result": {
        "status": 1,
        "num_results": 100,
        "total_results": 500,
        "results_remaining": 400,
        "matches": [
            {
                "match_id": 1487575980,
                "match_seq_num": 1334122787,
                "start_time": 1432118783,
                "lobby_type": 7,
                "radiant_team_id": 0,
                "dire_team_id": 0,
                "players": [
                    {
                        "account_id": 4294967295,
                        "player_slot": 0,
                        "hero_id": 26
                    },
                    {
                        "account_id": 22032060,
                        "player_slot": 1,
                        "hero_id": 22
                    },
                    {
                        "account_id": 24802150,
                        "player_slot": 2,
                        "hero_id": 8
                    },
                    {
                        "account_id": 4294967295,
                        "player_slot": 3,
                        "hero_id": 23
                    },
                    {
                        "account_id": 4294967295,
                        "player_slot": 4,
                        "hero_id": 35
                    },
                    {
                        "account_id": 4294967295,
                        "player_slot": 128,
                        "hero_id": 25
                    },
                    {
                        "account_id": 4294967295,
                        "player_slot": 129,
                        "hero_id": 73
                    },
                    {
                        "account_id": 4294967295,
                        "player_slot": 130,
                        "hero_id": 19
                    },
                    {
                        "account_id": 4294967295,
                        "player_slot": 131,
                        "hero_id": 88
                    },
                    {
                        "account_id": 138657453,
                        "player_slot": 132,
                        "hero_id": 46
                    }
                ]
                
            },
            {
                "match_id": 1486500565,
                "match_seq_num": 1333203789,
                "start_time": 1432069365,
                "lobby_type": 7,
                "radiant_team_id": 0,
                "dire_team_id": 0,
                "players": [
                    {
                        "account_id": 4294967295,
                        "player_slot": 0,
                        "hero_id": 84
                    },
                    {
                        "account_id": 4294967295,
                        "player_slot": 1,
                        "hero_id": 29
                    },
                    {
                        "account_id": 4294967295,
                        "player_slot": 2,
                        "hero_id": 93
                    },
                    {
                        "account_id": 97739429,
                        "player_slot": 3,
                        "hero_id": 12
                    },
                    {
                        "account_id": 157387016,
                        "player_slot": 4,
                        "hero_id": 76
                    },
                    {
                        "account_id": 81863485,
                        "player_slot": 128,
                        "hero_id": 33
                    },
                    {
                        "account_id": 48311512,
                        "player_slot": 129,
                        "hero_id": 37
                    },
                    {
                        "account_id": 67701328,
                        "player_slot": 130,
                        "hero_id": 2
                    },
                    {
                        "account_id": 22032060,
                        "player_slot": 131,
                        "hero_id": 22
                    },
                    {
                        "account_id": 24802150,
                        "player_slot": 132,
                        "hero_id": 8
                    }
                ]
                
            },


Как будет правильнее и удобнее парсить ?

Заранее большое спасибо Вам за ответы!
PM MAIL WWW   Вверх
AGENTxXx
Дата 21.5.2015, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Привет! По мне, дак JSON рулит. В последнее время использую в основном его.
На счёт парсинга - всё просто. Как понимаю, ты это делаешь на стороне сервера, то отдельные match'и можешь получить следующим образом (предположим вся инфа у тебя в переменной $result):
Код

$json_object = json_decode($result);


foreach ($json_object->result->matches as $value) {
    echo $value->match_id;
    echo "\r\nPlayers info \r\n\r\n";
    foreach ($value->players as $player) {
        echo "account_id:" . $player->account_id . " player_slot:" . $player->player_slot . " hero_id:" . $player->hero_id . "\r\n";
    }
    echo "\r\n";
}

PM MAIL   Вверх
Sice
Дата 21.5.2015, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Цитата(AGENTxXx @ 21.5.2015,  16:18)
Привет! По мне, дак JSON рулит. В последнее время использую в основном его.
На счёт парсинга - всё просто. Как понимаю, ты это делаешь на стороне сервера, то отдельные match'и можешь получить следующим образом (предположим вся инфа у тебя в переменной $result):
Код

$json_object = json_decode($result);


foreach ($json_object->result->matches as $value) {
    echo $value->match_id;
    echo "\r\nPlayers info \r\n\r\n";
    foreach ($value->players as $player) {
        echo "account_id:" . $player->account_id . " player_slot:" . $player->player_slot . " hero_id:" . $player->hero_id . "\r\n";
    }
    echo "\r\n";
}

Спасибо большое за помощь ! А подскажите пожалуйста, как брать информацию по каждому матчу и выводить эти данные в этом же файле.
То есть мне нужно Заходить в отдельно каждый матч, брать оттуда несколько переменных и выводить на страничке, в которой я применяю парсинг по последним матчам..
PM MAIL WWW   Вверх
AGENTxXx
Дата 22.5.2015, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Я не понял этого вопроса. В данном случае я и сделал вроде то, что тебе нужно. в $value хранятся данные твоего match'а, т.е. в этом цикле ты можешь как раз получить те данные, которые тебе нужны из него (в данном случае я получил только match_id). 

Если ты имеешь ввиду то, что ты хочешь добавить данные в уже существующий файл, то вот пример:
Код

$json_object = json_decode($result);

$i = 0;
foreach ($json_object->result->matches as $key => $value) {
    $json_object->result->matches[$key]->new_value = $i;
    $i++;
    echo $value->new_value;
    echo "\r\nPlayers info \r\n\r\n";
    foreach ($value->players as $player) {
        echo "account_id:" . $player->account_id . " player_slot:" . $player->player_slot . " hero_id:" . $player->hero_id . "\r\n";
    }
    echo "\r\n";
}

$json = json_encode($json_object);
die;


В данном случае я добавил новое значение new_value
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.