我需要一些json代码;它是从[
开始的。
如果我试图循环它,我会检索
警告:为foreach()提供的无效参数
有人能帮我正确地解码这个json吗?谢谢
PHP代码:
echo "<h2>Tradedoubler Coupon</h2>";
$tdjson = file_get_contents("http://api.tradedoubler.com/1.0/vouchers.json;voucherTypeId=1?token=280C407EC3D32D2C8E4C04A100DD00FEA9000580");
//$tdobj = json_decode(print_r($tdjson));
$tdobj = json_decode($tdjson,true);
//foreach($tdobj as $prog ) {
echo '<ul>';
echo '<li>' . print_r($tdobj) . '</li>
</ul>';
JSON文件:
[
{
id: 20108,
programId: 17269,
programName: "",
code: "6G4KGGDH",
updateDate: "1369813973159",
publishStartDate: "1370037600000",
publishEndDate: "1372629599999",
startDate: "1370037600000",
endDate: "1372629599999",
title: "Sconto",
shortDescription: "kkkkk",
description: "kkkk",
voucherTypeId: 1,
defaultTrackUri: "http://url.com/click?a(1556954)p(17269)ttid(13)",
siteSpecific: false,
discountAmount: 5,
isPercentage: false,
publisherInformation: "",
languageId: "it",
exclusive: false,
currencyId: "EUR",
logoPath: "http://url.com/file/17269/eDreams_100x50.jpg"
},
{
id: 19699,
programId: 29519,
programName: "",
code: "6G4KGGDH",
updateDate: "1369813973159",
publishStartDate: "1370037600000",
publishEndDate: "1372629599999",
startDate: "1370037600000",
endDate: "1372629599999",
title: "Sconto",
shortDescription: "kkkkk",
description: "kkkk",
voucherTypeId: 1,
defaultTrackUri: "http://url.com/click?a(1556954)p(17269)ttid(13)",
siteSpecific: false,
discountAmount: 5,
isPercentage: false,
publisherInformation: "",
languageId: "it",
exclusive: false,
currencyId: "EUR",
logoPath: "http://url.com/file/17269/eDreams_100x50.jpg"
}
]
发布于 2013-06-03 11:49:28
Tradedoubler的JSON是无效的。问题是它不把双引号放在对象属性名称的周围,只放在值上。
举个例子:
$json = '[
{
"id": 20108,
"programId": 17269,
"programName": "",
"code": "6G4KGGDH"
},
{
"id": 19699,
"programId": 29519,
"programName": "",
"code": "6G4KGGDH"
}
]';
print_r(json_decode($json));
在上面的JSON中,我添加了必要的双引号,如果运行该代码,您将看到它将成功地输出:
Array
(
[0] => stdClass Object
(
[id] => 20108
[programId] => 17269
[programName] =>
[code] => 6G4KGGDH
)
[1] => stdClass Object
(
[id] => 19699
[programId] => 29519
[programName] =>
[code] => 6G4KGGDH
)
)
因此,您有两个选择:
如果您想测试JSON的片段是否有效,可以将其粘贴到jsonlint.com中,这将告诉您错误在哪里。如果您从tradedoubler粘贴JSON,它确实会告诉您它是无效的。
发布于 2014-04-19 13:53:33
最后,我有了解决方案: Tradedoubler还提供了凭证文件的xml版本,因此使用curl可以对其进行解码:
<?php
$url="http://api.tradedoubler.com/1.0/vouchers?token=YOURTOKEN";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url); // get the url contents
$data = curl_exec($ch); // execute curl request
curl_close($ch);
$xml = simplexml_load_string($data);
print_r($xml);
?>
并循环结果:
<?php
$url="http://api.tradedoubler.com/1.0/vouchers?token=YOUR TOKEN HERE";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url); // get the url contents
$data = curl_exec($ch); // execute curl request
curl_close($ch);
$xml = simplexml_load_string($data);
foreach ($xml->voucher as $coupon){
echo '<li>'.$coupon->id.' - '.$coupon->programId.' - '.$coupon->programName.' - '.$coupon->code.' - '.$coupon->title.' - '.$coupon->shortDescription.' - '.$coupon->description.'</li>';
}
?>
https://stackoverflow.com/questions/16895551
复制相似问题