使用 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)在数组中进行搜索。
几天以来,我一直在尝试解析 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)在数组中进行搜索。