首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以[预警]开头

以[预警]开头
EN

Stack Overflow用户
提问于 2013-06-03 11:21:17
回答 2查看 323关注 0票数 0

我需要一些json代码;它是从[开始的。

如果我试图循环它,我会检索

警告:为foreach()提供的无效参数

有人能帮我正确地解码这个json吗?谢谢

PHP代码:

代码语言:javascript
运行
复制
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文件:

代码语言:javascript
运行
复制
[
    {
        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"
    }
]
EN

回答 2

Stack Overflow用户

发布于 2013-06-03 11:49:28

Tradedoubler的JSON是无效的。问题是它不把双引号放在对象属性名称的周围,只放在值上。

举个例子:

代码语言:javascript
运行
复制
$json = '[
    {
        "id": 20108,
        "programId": 17269,
        "programName": "",
        "code": "6G4KGGDH"
    },
    {
        "id": 19699,
        "programId": 29519,
        "programName": "",
        "code": "6G4KGGDH"
    }
]';

print_r(json_decode($json));

在上面的JSON中,我添加了必要的双引号,如果运行该代码,您将看到它将成功地输出:

代码语言:javascript
运行
复制
Array
(
    [0] => stdClass Object
        (
            [id] => 20108
            [programId] => 17269
            [programName] => 
            [code] => 6G4KGGDH
        )

    [1] => stdClass Object
        (
            [id] => 19699
            [programId] => 29519
            [programName] => 
            [code] => 6G4KGGDH
        )

)

因此,您有两个选择:

  1. 联系Tradedoubler并要求他们提供有效的JSON
  2. 解析缺少引号的属性名称并插入它们,这将纠正原始的无效JSON。

如果您想测试JSON的片段是否有效,可以将其粘贴到jsonlint.com中,这将告诉您错误在哪里。如果您从tradedoubler粘贴JSON,它确实会告诉您它是无效的。

票数 1
EN

Stack Overflow用户

发布于 2014-04-19 13:53:33

最后,我有了解决方案: Tradedoubler还提供了凭证文件的xml版本,因此使用curl可以对其进行解码:

代码语言:javascript
运行
复制
    <?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);

?>

并循环结果:

代码语言:javascript
运行
复制
<?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>';
}

?> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16895551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档