PHP-декодирование JSON

У меня есть следующий скрипт, чтобы получить результаты поиска от API, а затем разрезать массив и выгрузить его, у меня возникла проблема с расшифровкой JSON в массив, он возвращает Array(0) { } Это короткий код WordPress

Вот пример Json, который получен из api:

 [ { "barcode": "000015426950", "name": "Karen's cowboy", "author": "Ann", "author_last": "Martin", "publisher": "New York : Scholastic, c2000.", "year_pub": "", "edition": "", "genre": "", "checkout": "out", "series": "", "callnum": "MAR", "fiction": "true", "in_house": "false", "timestamp": "1355835387", "outto": "000008388615", "duedate": "1372005722", "ISBN": "059052528X", "media_type": "", "print": "false", "BOXID": "2147483647", "uid": "10", "printed": "" }, { "barcode": "000015426949", "name": "Karen's yo-yo", "author": "Ann M", "author_last": "Martin", "publisher": "New York : Scholastic, c2000.", "year_pub": "", "edition": "", "genre": "", "checkout": "out", "series": "", "callnum": "MAR", "fiction": "true", "in_house": "false", "timestamp": "1355835343", "outto": "000008388615", "duedate": "1373216918", "ISBN": "0590525115", "media_type": "", "print": "false", "BOXID": "", "uid": "10", "printed": "" }, ... } ] 

Вот код, используемый для получения JSON и его разбиения на страницы:

 function book_search_form() { ?> <form method='get'><input type='text' name='searchvalue' value='<? if (isset($_GET['searchvalue'])) echo $_GET['searchvalue'];?>' />&nbsp;<input type='submit' value='Search' /><input type='hidden' name='pagenum' value='1' /></form> <br> <?php if(isset($_GET['pagenum']) && isset($_GET['searchvalue'])) { $page=$_GET['pagenum']; $searchvalue = $_GET['searchvalue']; // get the value of the page from your url $recordsPerPage=10; // number of records you want on your page $api_url = get_option('api_url'); $api_key = get_option('api_key'); $data = file_get_contents("$api_url/book/index.php/name/$searchvalue?key=2513619352"); $array = (array)json_decode($data); $index=($page*$recordsPerPage)-1; $recordsToBeDisplayed = array_slice($array,$index,$recordsPerPage);// this array contains all the records you would want to display on a page; $total_pages=ceil(count($array)/$recordsPerPage); } else { //use default values } ?> <html>...<body><div id="records"> <? echo '<pre>'; echo $recordsToBeDisplayed; echo '</pre>';?><!-- use the array created above to display records --> </div> <div id="pagination"> <? for($j=1;$j<=$total_pages;$j++){ if($j==$page) {?> <li style="display: inline;"><a href="?searchvalue=&pagenum=<?=$j?>"><u><?=$j?></u></a></li> <?}else{?> <li style="display: inline;"><a href="?searchvalue=&pagenum=<?=$j?>"><?=$j?></a></li> <?}}?> </div> <?php } 

Solutions Collecting From Web of "PHP-декодирование JSON"

Попробовать json_decode

 $array = json_decode($data, true); 

Тогда вы получите массив вместо объекта.

Пример # 1 Примеры json_decode ()

 <?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?> 

Вышеприведенный пример выводит:

 object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } 

Отделите свой php от html, пожалуйста, используйте отступы и:

 $array = json_decode($data, TRUE); //second param used for associative array return Example #1 json_decode() examples <?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?> The above example will output: object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } 

PS: Из Библии ( http://php.net/manual/en/function.json-decode.php )

Если вход в формате массива, то вы также можете использовать ту же функцию json_decode . Вам просто нужно применить цикл для результата.

json = '{

"a1": {"field1": "name1", "field2": age1, "field3": "country1"},

"a2": {"field1": "name2", "field2": age2, "field3": "country2"},

"a3": {"field1": "name3", "field2": age3, "field3": "country3"}} ';

$ Array = json_decode ($ json, true);

foreach ($ Array as $ key => $ value)
{

  echo " $key "; foreach ($value as $k => $val) { echo "$k | $val <br />"; } 

}