Я использую PHP на общем сервере для доступа к внешнему сайту через API, который возвращает JSON, содержащий 2 уровня данных (Уровень 1: Исполнитель & Уровень 2: Внутренний элемент категории). Я хочу, чтобы преобразовать это многомерный ассоциативный массив без применения функции json_decode (она использует слишком много памяти для такого использования !!!)Преобразование строки JSON в массив WITHOUT json_decode
Примера данных JSON:
[
{
"performerId": 99999,
"name": " Any performer name",
"category": {
"categoryId": 99,
"name": "Some category name",
"eventType": "Category Event"
},
"eventType": "Performer Event",
"url": "http://www.novalidsite.com/something/performerspage.html",
"priority": 0
},
{
"performerId": 88888,
"name": " Second performer name",
"category": {
"categoryId": 88,
"name": "Second Category name",
"eventType": "Category Event 2"
},
"eventType": "Performer Event 2",
"url": "http://www.novalidsite.com/somethingelse/performerspage2.html",
"priority": 7
}
]
Я пытался использовать SUBSTR и полосу «[» и «]».
Затем выполняется вызов:
preg_match_all('/\{([^}]+)\}/', $input, $matches);
Это дает мне строку для каждой строки НО обрезает после завершающего «}» из данных категорий.
Как я могу вернуть FULL ROW данных AS ARRAY, используя что-то вроде preg_split, preg_match_all и т. Д. ВМЕСТО из тяжелых вызовов, таких как json_decode, в общую строку JSON?
Как только у меня есть массив с каждой правильно обозначенной строкой, я МОГУТ, ЧТО выполнить json_decode в этой строке, не перегружая память на общем сервере.
Для тех, кто хочет более подробно об использовании json_decode вызывает ошибки:
$aryPerformersfile[ ] = file_get_contents('https://subdomain.domain.com/dir/getresults?id=1234');
$aryPerformers = $aryPerformersfile[0];
unset($aryPerformersfile);
$mytmpvar = json_decode($aryPerformers);
print_r($mytmpvar);
exit;
Может ли эта ссылка http://stackoverflow.com/que stions/2583472/regex-to-validate-json будут полезны? – crrad
Таким образом, вместо использования json_decode вы вместо этого вызываете, несомненно, менее эффективное обходное решение. Ага. Это будет плавно. @AbraCadaver проверить [phantomJS] (http://phantomjs.org/) –
как он использует слишком много памяти? можете ли вы показать нам, как его слишком много использовать, каково ваше определение слишком много? моя догадка заключается не в том, что функция использует много, а в том, что ваш мусор не собирает правильно с 'unset()', или вам нужно увеличить выделение памяти в вашем приложении. – cmorrissey