【问题标题】:Target specific instance of the same label while parsing JSON在解析 JSON 时定位相同标签的特定实例
【发布时间】:2015-11-20 15:09:48
【问题描述】:

我正在尝试获取这两种饮料的价格,并在网站上显示它们各自的尺寸:

"Beverage":{
    "BeverageA":[{
        "Prices":[{
            "Id":"A",
            "Size":"5.0",
            "Price":"2.0"
        },{
            "Id":"B",
            "Size":"16.0",
            "Price":"4.75",
        }],
    }],
    "BeverageB":[{
        "Prices":[{
            "Id":"A",
            "Size":"5.0",
            "Price":"2.5"
        },{
            "Id":"B",
            "Size":"16.0",
            "Price":"5.0",
        }],
    }],
}

由于这两种饮料都使用“Id、Size 和 Price”标签,我无法像往常一样在 PHP 中创建一个变量来获取该特定值:

foreach ($json_taps as $beverage) {
    $a_price = $beverage['Beverage']['Prices']['Price'];
    $b_price = $beverage['Beverage']['Prices']['Price'];

$html =
    //Display the price of beverage a
    $a_price.

    ' '.

    //Display the price of beverage b
    $b_beverage

echo $html;
}

因为这不允许我定位两种特定饮料中的哪一种,所以这不起作用。

我想过尝试类似的方法:

foreach ($json_taps as $beverage) {
     $id = $beverage['Beverage']['Prices']['Id'];
     $price = $beverage['Beverage']['Prices']['Price'];


$html =
    //Check for Id A
    if ($id = "A") {
        //Display price of A
        $price
    };

    //Check for Id B
    if ($id = "B") {
        //Display price of B
        $price
    };

echo $html;
}

但显然,这也行不通。

只是希望能够分别定位同一标签的两个实例以显示在页面上。对于这个例子,我简化了 DigitalPour 的 JSON 文件。

感谢您的帮助。

【问题讨论】:

    标签: php json api


    【解决方案1】:

    尝试根据提供的最后一个 JSON 结构列出饮料及其变体/价格:

    $html = '';
    
    foreach ($json_taps['Beverage'] as $beverage_name => $beverage) {
        $html .= $beverage_name.' ';
    
        foreach ($beverage[0]['Prices'][0] as $variant) {
            $html .= $variant['Size'].':'.$variant['Price'];
        }
    
    }
    
    echo $html;
    

    如果这不是您需要的,您可以轻松访问单个饮料,而不是循环访问它们,如下所示:

    $beverageA = $json_taps['Beverage']['BeverageA']; // see code above inside first loop
    $beverageB = $json_taps['Beverage']['BeverageB']; // etc...
    

    【讨论】:

    • 我知道这不包括在原始问题中,但是这个解决方案对我不起作用,因为已经有一个循环用于不同的饮料。嵌套循环会破坏站点。我希望我可以在那里更改 JSON 文件。我希望我能改变一些奇怪的事情。但是,它是由不会为我们更改的第三方生成的。
    • 我看到你的最后编辑,JSON 结构发生了很大变化,这样更有意义。相应地更新答案,没有额外的循环。
    • 谢谢!我什至没有考虑嵌套循环的问题,所以我没有将它包含在原始问题中。
    • 好吧,为了通用性,我仍然遍历饮料数组,但添加了之后如何访问单个饮料。希望对您有所帮助。
    • 它总是归结为缺少标点符号,不是吗?现在,随着列表的继续,我正在获取添加到前一个饮料中的每种饮料的价格。我假设它与初始循环有关,并将其与第二个循环联系起来。更新小提琴jsfiddle.net/jagmz2fL/2
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多