用PHP解析JSON(包含制表符和数组的数组)


Parse a JSON (array with tabs and arrays) with PHP

几天来我一直在尝试解析JSON响应,但没有成功。我在互联网和这个网站上读到如何用foreach解析,但我认为json的结构与我发现的例子太不同了。这里是JSON:

 array(1) 
        { ["matches"]=> array(10) 
            { [0]=> array(13) { ["matchId"]=> int(2125878813) 
                                ["region"]=> string(3) "EUW" 
                                ["platformId"]=> string(4) "EUW1" 
                                ["matchMode"]=> string(7) "CLASSIC" 
                                ["matchType"]=> string(12) "MATCHED_GAME" 
                                ["matchCreation"]=> float(1432656547642) 
                                ["matchDuration"]=> int(1852) 
                                ["queueType"]=> string(15) "RANKED_SOLO_5x5" 
                                ["mapId"]=> int(11) 
                                ["season"]=> string(10) "SEASON2015" 
                                ["matchVersion"]=> string(9) "5.9.0.318" 
                                ["participants"]=> array(1) 
                                    { [0]=> array(10) { 
                                    ["teamId"]=> int(200) 
                                    ["spell1Id"]=> int(7) 
                                    ["spell2Id"]=> int(4) 
                                    ["championId"]=> int(67) 
                                    ["highestAchievedSeasonTier"]=> string(8) "PLATINUM" 
                                    ["timeline"]=> array(9) 
                                        { ["creepsPerMinDeltas"]=> array(3) 
                                            { ["zeroToTen"]=> float(6.2) 
                                              ["tenToTwenty"]=> float(7.4) 
                                              ["twentyToThirty"]=> float(4.4) } 
                                              ["xpPerMinDeltas"]=> array(3) 
                                                { ["zeroToTen"]=> float(336.2) 
                                                  ["tenToTwenty"]=> float(428.3) 
                                                  ["twentyToThirty"]=> float(396) } 
                                                    ["goldPerMinDeltas"]=> array(3) { 
                                                    ["zeroToTen"]=> float(270.7) 
                                                    ["tenToTwenty"]=> float(363.6) 
                                                    ["twentyToThirty"]=> float(294.8) }

如果我理解得好,这是一个数组,里面有制表符和数组?

我想例如显示10个匹配id:比赛——> matchId比赛->参与者> championId比赛参与者-> ->时间> creepsPerMinDeltas -> zeroToTen

以下是我目前所做的显示matchId:
 $decodeHisto = json_decode ($resultHisto,true);
    //var_dump($decodeHisto);       
    foreach ($decodeHisto{[matches]} as $d)      
    {
    echo $d->{[matchId]}-;
    }

谁能帮我一下?

你的代码不是JSON,因为JSON是这样定义的:

{
"Herausgeber": "Xema",
  "Nummer": "1234-5678-9012-3456",
  "Deckung": 2e+6,
  "Waehrung": "EURO",
  "Inhaber": {
    "Name": "Mustermann",
    "Vorname": "Max",
    "maennlich": true,
    "Hobbys": [ "Reiten", "Golfen", "Lesen" ],
    "Alter": 42,
    "Kinder": [],
    "Partner": null
  }
}

你可以用下面的代码将JSON数组转换为PHP:

$array = json_decode($json);

但正如我之前所说,你的代码不是JSON。它甚至像是一个PHP数组。然后你可以使用:

$arr["matches"][0]["matchId"]
例如

考虑到你在这里对你的问题发表了自己的"回答",提供了额外的信息,我想指出这一点:

所以如果你在你的问题中发布的是你从调用json_decode()得到的结果的转储,那么你所拥有的只是一个数组。一个关联的,多层数组,但仍然只是一个普通的php数组。这也是json_decode()函数的文档中明确说明的:http://php.net/manual/en/function.json-decode.php

绝对没有理由以某种方式"解析"数组。您可以在转储中看到的"制表符"或空白符是,而不是结果的部分,因此也不是数组的部分。这些是你用来可视化数组的dumoing函数的产物。你可以简单地通过关联的"路径"直接访问数组的所有成员(或成员的成员…),就像你可以在谷歌上找到的所有php代码示例中看到的那样。下面是一个例子:

$value = $decodedJson['matches'][0]['matchDuration'];

给定$decodedJson是在你的问题中发布的结果数组,那么$value现在将保持整数值1852。

可以访问数组的任何部分或元素。您可以使用php的迭代构造(如foreach等)遍历数组的各个部分。您可以通过php的数组函数(http://php.net/manual/en/ref.array.php)在数组中进行搜索。