2011-10-27 157 views
2

我在做PHP的JSON解析器的一些存儲有關遺產的信息的API。我遇到了解析問題,因爲它返回的是NULL vualue而不是數組或對象。簡單的JSON代碼是很好的解析,但這樣的:Json to php,json_decode返回NULL

{"success":true,"totalCount":1,"data":[{"id":996944,"listingId":"2/2089/OMW","mlsId":null,"swoId":null,"sectionName":"ApartmentRental","geoLat":50.06442971278027,"geoLng":19.953176730749647,"country":{"id":34,"name":"Polska","code":"PL"},"location":{"id":42955,"name":"/Małopolskie/Kraków/Kraków-Śródmieście","province":"Małopolskie","locality":"Kraków","quarter":"Kraków-Śródmieście"},"street":{"id":138781,"name":"Hugona Kołłątaja","fullName":"ul. Hugona Kołłątaja"},"foreignStreet":null,"foreignLocation":null,"contractType":"Exclusive","ownershipType":"Mortgage","groundOwnershipType":null,"isSpecial":true,"price":{"amount":2700,"currency":"PLN"},"priceBeforeReduction":null,"dateCreated":"2011-10-22 20:32:35","lastUpdated":"2011-10-25 11:51:09","actualisationDate":"2011-10-22 20:32:34","statusChangeDate":"2011-10-22 20:32:34","images":[{"id":6514430},{"id":6514431},{"id":6514432},{"id":6514433},{"id":6514434},{"id":6514435},{"id":6514436},{"id":6514437},{"id":6514438},{"id":6514439},{"id":6514440},{"id":6514441},{"id":6514442},{"id":6514443}],"licenceNumber":null,"description":"Do wynajęcia piękne, przestronne mieszkanie w wysokim standardzie, świeżo po remoncie przy ulicy Hugona Kołłątaja w Krakowie. Znajduje się w bardzo pięknej z zewnątrz i wewnątrz kamienicy. Bardzo dobra komunikacja, duża powierzchnia 85m2 i wysoki standard wykończenia dają poczucie komfortu. Bardzo blisko Rynku Głównego, Hali Targowej i Galerii Kazimierz. Dzięki bardzo dobrze rozwiniętej komunikacji miejskiej możliwość szybkiego dostania się w każde miejsce Krakowa. Blisko wiele punktów handlowych i usługowych.\n\nMieszkanie składa się 3 odzielnych pokoi, przedpokoju, kuchni oraz 2 łazienek i balkonu. Jest możlwość umeblowania mieszkania według Państwa preferencji na koszt Właściciela. Ogrzewanie własne samodzielne. Możliwość podłączenia Internetu i telefonu.\n\n","englishDescription":null,"russianDescription":null,"parentListingId":null,"totalArea":85,"priceM2":{"amount":31.76,"currency":"PLN"},"noOfFloors":null,"floorNo":null,"furnished":true,"auctionStartingPrice":null,"auctionFrom":null,"auctionTo":null,"openDaysFrom":null,"openDaysTo":null}]} 

我得到:NULL

儘管像http://json.parser.online.fr/在線解析器做的工作就好了。

我正在使用php內置funcion json_decode,還有一些來自php.net,由用戶完成。

這裏是我的PHP代碼:

$url="url_to_json"; 
$str=file_get_contents($url); 
$str = substr($str, 1, strlen($str) - 2); 
$str = preg_replace("/([a-zA-Z0-9_]+?):/" , "\"$1\":", $str); 
$new=(json_decode($new, true)); 
var_dump($new); 

任何想法?

+2

爲什麼不直接使用'json_decode()'直上文件的內容?其他代碼是什麼? – alex

+0

這是因爲unicode字符的名字(小波蘭/克拉科夫/克拉科夫 - Śródmieście)。 json_last_error()很可能會返回JSON_ERROR_UTF8。不是問題的答案,但希望這會幫助 –

+0

@Darhazer,是不是你引用的值? –

回答

4

請對原始JSON數據使用json_decode();。只要它是有效的JSON,你就不需要任何額外的代碼就可以順利地訪問它。

以數組形式訪問返回值。

$arr = json_decode(file_get_contents($json)); 
+0

謝謝你的回覆,勉強這是唯一的,我沒有嘗試過。 – PiotrC

2

使用此:

$new = json_decode($str , true); 
8

如果相同的JSON字符串在其他網絡分析器進行分析,你有一個字符編碼的問題,嘗試將字符串函數utf8_encode之前轉換:

$new=(json_decode(utf8_encode($str), true)); 

json_decode中所解釋的:

正在解碼的json字符串。

此函數僅適用於UTF-8編碼數據。

+1

由於您更正了答案,所以我將-1更改爲+1,但您應該清楚@PietrC使用了錯誤的變量。 – Stijn

+0

這解決了我的問題,謝謝+1 –

+1

花費2.5小時後,這是最好的答案,非UTF-8字符打破了json_decode,並且var_dump顯示爲NULL。 – AMB

0

$json_a = json_decode($string, true);是返回null值,以便您可以使用下面的代碼:

$json_a = json_decode(utf8_encode($string), true);