使用 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) }

如果我理解得很好,这是一个内部有制表符和数组的数组?

I would like for example to display the 10 matches id : matches->matchId matches->participants->championId matches->participants->timeline->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"]

例如。

鉴于您通过在此处针对您的问题发布自己的 "answer" 提供的额外信息,我想指出这一点:

因此,如果您在问题中发布的是调用 json_decode() 返回的结果的转储,那么您所拥有的只是一个数组。一个关联的多级数组,但仍然只是一个普通的 php 数组。这也是json_decode()函数的文档中明确指出的:http://php.net/manual/en/function.json-decode.php

绝对没有理由以某种方式 "parse" 数组。您在转储中看到的 "tabs" 或空格是您得到的结果的 而不是 的一部分,因此是数组的一部分。这些是您用来可视化数组的 dumoing 函数的人工产物。您可以简单地通过关联 "path" 直接访问数组的所有成员(或成员的成员...),正如您将在 php 代码的所有示例中看到的那样,您可以在 google.这里有一个例子:

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

假设 $decodedJson 是您问题中发布的结果数组,那么 $value 现在将保存整数值 1852。

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