Разбор JSON

Тема в разделе "Регулярные выражения", создана пользователем bolyk, 14 ноя 2013.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. bolyk

    bolyk

    Регистр.:
    21 авг 2006
    Сообщения:
    308
    Симпатии:
    206
    Приветствую, уважаемые. Помогите пожалуйста с регулярным выражением для разбора строки. Задача получить массив элементов вида:
    Код:
    array(7) {
      [0]=>
      string(204) ""id":"142174","t":"Чтобы похудеть на 5 кг в неделю нужно пить до еды...","rate":11647.310467366999,"descr":"Эти зерна содержат вещество, сжигающее подкожный жир","type":"jpg","imgp":"12453/200x200/142174""
      [1]=>
      string(6) "142174"
      [2]=>
      string(52) "Чтобы похудеть на 5 кг в неделю нужно пить до еды..."
      [3]=>
      string(18) "11647.310467366999"
      [4]=>
      string(52) "Эти зерна содержат вещество, сжигающее подкожный жир"
      [5]=>
      string(3) "jpg"
      [6]=>
      string(20) "12453/200x200/142174"
    }
    сейчас я решаю этот вопрос так:
    Код:
    $regexp = '/\"id\"\:\"(.*)\"\,\"t\"\:\"(.*)\"\,\"rate\"\:(.*)\,\"descr\"\:\"(.*)\"\,\"type\"\:\"(.*)\"\,\"imgp\"\:\"(.*)\"/';
    $content = file_get_contents("text.txt");
    $peaces = explode('},{',$content);
    foreach($peaces as $peace){
        preg_match($regexp, $peace, $matches);
        echo "<pre>";
        var_dump($matches);
    
       
    }
    
    Но как видите разбиваю строку на подстроки и уже их прогоняю через регулярное выражение. Но очень много фалов приходится так обрабатывать что очень сильно отжирает проц и опративку.
    Хочу спросить, и по возможности, помочь решить эту проблему в один проход.
    Файл, который нужно разобрать в прикрепленных.
    Спасибо большое.
     

    Вложения:

    • text.txt
      Размер файла:
      6,2 КБ
      Просмотров:
      4
  2. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    182
    Симпатии:
    74
    Гм.. Для начала я бы предложил попробовать альтернативное решение.
    То, что находит в alert'e - это строка в json-формате. Соответственно, её можно превратить в объект:

    PHP:
    // Пусть в этой переменной находится искомая строка
    // Если надо читать её из файла - делаем file_get_contents()
    // Если надо убирать alert - убираем через preg_replace
    $s '{"teasers":[{"id":"142174","t":"Чтобы похудеть на 5 кг в неделю нужно пить до еды...","rate":11647.310467366999,"descr":"Эти зерн<......>';

    // Декодируем строку, превращая её в объект
    $d json_decode($s);

    echo 
    '<pre>';print_r($d);

    /*
    ##
    ## В результате имеем
    ##

    stdClass Object
    (
       [teasers] => Array
       (
          [0] => stdClass Object
          (
             [id] => 142174
             [t] => Чтобы похудеть на 5 кг в неделю нужно пить до еды...
             [rate] => 11647.310467367
             [descr] => Эти зерна содержат вещество, сжигающее подкожный жир
             [type] => jpg
             [imgp] => 12453/200x200/142174
          )

          [1] => stdClass Object
          (
             [id] => 142178
             [t] => Этот напиток сделает из тебя модель!
             [rate] => 11647.310467367
             [descr] => Худеем на 10 кг без диет
             [type] => jpg
             [imgp] => 12453/200x200/142178
          )

    ## и так далее

    */

    // По полученному объекту можно ходить
    foreach( $d->teasers as $element ) {
        echo 
    "{$element->id}<br>";
    }
     
    bolyk нравится это.
Статус темы:
Закрыта.