2016-02-22 183 views
0

嘗試讀取JSON數據,我不能讓它使用下面的代碼正常工作:無法讀取JSON數據

$apiurl = "https://api.hasoffers.com/Apiv3/json?NetworkId=REDACTED&Target=Affiliate_Report&Method=getStats&api_key=REDACTED&fields%5B%5D=Stat.conversions&fields%5B%5D=Stat.unique_clicks&fields%5B%5D=Stat.payout&filters%5BStat.date%5D%5Bconditional%5D=LESS_THAN&filters%5BStat.date%5D%5Bvalues%5D=2016-02-21&filters%5BStat.date%5D%5Bconditional%5D=GREATER_THAN&filters%5BStat.date%5D%5Bvalues%5D=2016-02-21"; 


$data = json_decode(file_get_contents($apiurl), true); 

foreach($data['response']['data'] as $dataline) { 

    echo "Conversions: {$dataline['Stat']['conversions']} Payout: {$dataline['Stat']['payout']}"; 

} 

該查詢生成以下JSON回報,我只是」牛逼弄清楚如何正確讀取統計數據(它也循環通過7號線在foreach這也使得沒有意義的我):

{「請求」:{「目標」:「Affiliate_Report」,「格式「:」 JSON」, 「服務」: 「HasOffers」, 「版本」: 「2」, 「網絡ID」: 「絕密」, 「方法」: 「getStats」, 「API_KEY」: 「絕密」, 「田」: [ 「Stat.conversions」,「Stat.unique_clic KS 「 」Stat.payout「], 」過濾器「:{ 」Stat.date「:{ 」有條件的「: 」GREATER_THAN「, 」值「: 」2016年2月21日「}}, 」__ gaTune「:」 GA1 .2.1289716345.1455904273" , 「__ UTMA」: 「267117079.1377304869.1455903853.1455904273.1455904273.1」, 「__ UTMC」: 「267117079」, 「__ utmz」:「267117079.1455904273.1.1.utmcsr = developers.hasoffers.com | utmccn =(引薦)| utmcmd =轉診| utmcct =/「 」_ biz_uid「: 」1742fd1f613440a4cfbb5a510d1d7def「, 」_ biz_nA「: 」1「, 」_ biz_pendingA「: 」[]「, 」_ hp2_id_1318563364「: 」5257773084071598.0276720083.0714677778「, 」_ GA「:」 GA1。 2.1377304869.1455903853 「},」 響應 「:{」 狀態 「:1,」 則httpStatus 「:200,」 數據 「:{」 頁面 「:1,」 當前 「:50,」 計數 「:1,」 PAGECOUNT「: 1, 「數據」:[{ 「STAT」:{ 「轉化」: 「1000」, 「unique_clicks」: 「1000」, 「支付」: 「1000.000000」}}], 「dbSource」: 「branddb」},」錯誤「:[],」errorMessage「:null}}

+2

它是無效的json。如有疑問,只需複製粘貼到諸如[json lint](http://jsonlint.com)之類的許多網站中。 – YvesLeBorg

+0

爲了澄清,這些數字是我不想公開的,他們沒有作爲文本返回,我在編輯數字時意外刪除了引號,爲了清晰起見,我將對其進行編輯 –

回答

0

實際上感謝你,因爲網站幫了不少忙意識到有第二陣列還標有「數據」的第一個「數據」數組下,所以我需要將其更改爲:

$數據[「響應」] [ 'data'] ['data'] as $ dataline

0

如果您的JSON與您發佈的完全相同,那麼它是無效的JSON,如每個評論。

無效部分是REDACTED沒有雙引號的單詞。

要繞過這個錯誤,你可以嘗試這樣:

$data = file_get_contents($apiurl); 
$data = preg_replace('/:REDACTED(?=\W)/', ':"REDACTED"', $data); 

$json = json_decode($data, True); 

這將適用於上面的例子,但是請注意,是一招,它不能工作如果一些JSON字段一個價值像「sometext:刪減,sometext」:這是不可能的,但不是不可能的。