Intereting Posts
Как извлечь html-комментарии и весь html, содержащийся в узле? Неустранимая ошибка: использование $ this, если не в объектном контексте в Динамическое имя константы в PHP PHP Вызов метода экземпляра с помощью call_user_func в том же классе Обрезаемая фатальная ошибка: объект класса stdClass не может быть преобразован в строку в … после попытки вставить в базу данных Загрузка больших файлов в PHP Агенты для тестирования модулей (геттеры и сеттеры) php сравнить два ассоциативных массива strip_tags достаточно, чтобы удалить HTML из строки? ReferenceError: $ не определен yii2 Справка по рекурсии PHP, необходимая для создания древовидной структуры Запросить данные во Flash-ролике из PHP во время выполнения Извлечь весь контент (включая HTML) из класса div с помощью PHP Слияние существующего PDF с динамически созданным PDF с использованием TCPDF Echo строка с переменной внутри, полученная из БД

PHP: вопрос о расшифровке Json

Как я могу декодировать весь файл arround 10k без ограничения памяти php? я нашел код, который разбил фид на части: http://pastebin.com/m43c3384f

как изменить код для работы с фидом ниже:

GAF_update_projects_vertical_callback({"projects":{"count":2,"items":[{"id":502817,"name":"SEO","url":"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FSEO%2FSEO.502817.html","start_unixtime":1252386582,"start_date":"Tue, 08 Sep 2009 01:09:42 -0400","end_unixtime":1252818582,"end_date":"Sun, 13 Sep 2009 01:09:42 -0400","buyer":{"url":"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fusers%2F1094422.html","id":1094422,"username":"eyalbiber"},"state":"A","short_descr":"Hi, My name is Eyal. I'm looking for seo expert to work with him on long term relationship. I need...","options":{"featured":0,"nonpublic":0,"trial":0,"fulltime":0,"for_gold_members":0,"hidden_bids":0},"budget":{"min":30,"max":250},"jobs":["SEO"],"bid_stats":{"count":0,"avg":false}},{"id":503874,"name":"websubmissionarticles","url":"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FCopywriting%2Fwebsubmissionarticles.html","start_unixtime":1252386528,"start_date":"Tue, 08 Sep 2009 01:08:48 -0400","end_unixtime":1252559328,"end_date":"Thu, 10 Sep 2009 01:08:48 -0400","buyer":{"url":"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fusers%2F39628.html","id":39628,"username":"seexpert"},"state":"A","short_descr":"need some1 to rewrite articles by taking them from the net from various min 5 sources. he\/she can draft...","options":{"featured":0,"nonpublic":0,"trial":0,"fulltime":0,"for_gold_members":0,"hidden_bids":0},"budget":{"min":30,"max":250},"jobs":["Copywriting"],"bid_stats":{"count":0,"avg":false}}]}}) 

Я пробовал этот код ниже:

 <?php require("JSON.php"); $mochi_url = "http://api.getafreelancer.com/Project/Search.json?aff=480992&callback=GAF_update_projects_vertical_callback&order=submitdate&count=50&iads=true&nonpublic=0&charset=UTF-8"; $feed = file_get_contents($mochi_url); $feed_start=strpos($feed,"[{"); $feed = substr($feed,$feed_start+1); $feed = substr($feed,0,strlen($feed)-2); $games = explode("{\"id\": \"",$feed); unset($feed); for($x=1;$x<=count($games);$x++){ $games[$x] = "{\"name\": \"".$games[$x]; $games[$x] = substr($games[$x],0,strlen($games[$x])-2); $games_decode = json_decode($games[$x], true); foreach($games_decode as $varname => $varvalue) { $mochi[$varname] = $varvalue; } $name = $mochi['name']; echo "$x - Name: {$mochi['name']} <br>"; unset ($games[$x]); } ?> с <?php require("JSON.php"); $mochi_url = "http://api.getafreelancer.com/Project/Search.json?aff=480992&callback=GAF_update_projects_vertical_callback&order=submitdate&count=50&iads=true&nonpublic=0&charset=UTF-8"; $feed = file_get_contents($mochi_url); $feed_start=strpos($feed,"[{"); $feed = substr($feed,$feed_start+1); $feed = substr($feed,0,strlen($feed)-2); $games = explode("{\"id\": \"",$feed); unset($feed); for($x=1;$x<=count($games);$x++){ $games[$x] = "{\"name\": \"".$games[$x]; $games[$x] = substr($games[$x],0,strlen($games[$x])-2); $games_decode = json_decode($games[$x], true); foreach($games_decode as $varname => $varvalue) { $mochi[$varname] = $varvalue; } $name = $mochi['name']; echo "$x - Name: {$mochi['name']} <br>"; unset ($games[$x]); } ?> 

он возвращает меня

Предупреждение: неверный аргумент, предоставленный foreach () в /home/studiox/public_html/getafreelancer/auto.php в строке 18 1 – Имя:

Есть идеи?

Прежде всего, избегайте вашей строки json. Как это:

 $json_string = "{\"projects\":{\"count\":2,\"items\":[{\"id\":502817,\"name\":\"SEO\",\"url\":\"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FSEO%2FSEO.502817.html\",\"start_unixtime\":1252386582,\"start_date\":\"Tue, 08 Sep 2009 01:09:42 -0400\",\"end_unixtime\":1252818582,\"end_date\":\"Sun, 13 Sep 2009 01:09:42 -0400\",\"buyer\":{\"url\":\"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fusers%2F1094422.html\",\"id\":1094422,\"username\":\"eyalbiber\"},\"state\":\"A\",\"short_descr\":\"Hi, My name is Eyal. I'm looking for seo expert to work with him on long term relationship. I need...\",\"options\":{\"featured\":0,\"nonpublic\":0,\"trial\":0,\"fulltime\":0,\"for_gold_members\":0,\"hidden_bids\":0},\"budget\":{\"min\":30,\"max\":250},\"jobs\":[\"SEO\"],\"bid_stats\":{\"count\":0,\"avg\":false}},{\"id\":503874,\"name\":\"websubmissionarticles\",\"url\":\"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FCopywriting%2Fwebsubmissionarticles.html\",\"start_unixtime\":1252386528,\"start_date\":\"Tue, 08 Sep 2009 01:08:48 -0400\",\"end_unixtime\":1252559328,\"end_date\":\"Thu, 10 Sep 2009 01:08:48 -0400\",\"buyer\":{\"url\":\"http:\/\/www.getafreelancer.com\/affiliates\/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fusers%2F39628.html\",\"id\":39628,\"username\":\"seexpert\"},\"state\":\"A\",\"short_descr\":\"need some1 to rewrite articles by taking them from the net from various min 5 sources. he\/she can draft...\",\"options\":{\"featured\":0,\"nonpublic\":0,\"trial\":0,\"fulltime\":0,\"for_gold_members\":0,\"hidden_bids\":0},\"budget\":{\"min\":30,\"max\":250},\"jobs\":[\"Copywriting\"],\"bid_stats\":{\"count\":0,\"avg\":false}}]}}"; 

PHP имеет встроенную поддержку JSON. Вы можете декодировать строку JSON непосредственно в ассоциативном массиве PHP, используя json_decode ():

 $result = json_decode($json_string, true); 

Тестирование:

 echo $result['projects']['items'][0]['name']; echo '<br>'; echo $result['projects']['items'][0]['url']; 

Результат:

 SEO http://www.getafreelancer.com/affiliates/ref.php?u=boon86&l=http%3A%2F%2Fwww.getafreelancer.com%2Fprojects%2FSEO%2FSEO.502817.html 

ОБНОВИТЬ:

Ответ на вопрос : что делать, если у меня много проектов внутри канала JSON, и я хочу, чтобы каждый из них хранился в mysql.

Это действительно не связано с JSON, а скорее с массивами PHP. В PHP есть много удобных функций, которые вы можете использовать. В этом случае вам нужно знать количество элементов массива для ваших проектов (чтение: количество проектов), а затем извлечь все данные из вашего массива, используя простой цикл.

 for($i = 0; $i < count($result['projects']['items']); $i++) { $project_name = $result['projects']['items'][$i]['name']; $project_id = $result['projects']['items'][$i]['id']; $project_date = $result['projects']['items'][$i]['start_date']; // save / print / do whatever you want with this data echo "Project : $project_name [$project_id] - $project_date<br>"; } 

PS Хороший PHP-массив шаг за шагом учебник здесь .

Если у вас просто не хватает памяти, попробуйте изменить параметр memory_limit в php.ini на нечто большее, чем значение по умолчанию (по умолчанию может быть 8 МБ, но я не уверен).

На странице увеличения страницы памяти PHP на drupal.org есть примеры других способов увеличить ограничение памяти.