Разбор JSON

Статус
В этой теме нельзя размещать новые ответы.

bolyk

Мой дом здесь!
Регистрация
21 Авг 2006
Сообщения
315
Реакции
228
Приветствую, уважаемые. Помогите пожалуйста с регулярным выражением для разбора строки. Задача получить массив элементов вида:
Код:
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 KB · Просмотры: 4
Гм.. Для начала я бы предложил попробовать альтернативное решение.
То, что находит в 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>";
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху