【问题标题】:Decoding and looping through PHP JSON array通过 PHP JSON 数组解码和循环
【发布时间】:2017-03-13 13:31:27
【问题描述】:

我有以下解码的 JSON 数组。 我需要访问上下文中的“类型”,并且需要遍历有效负载中的每个值。我该怎么做?

 {
   "RequestHeader":  
      {  
                  "mess": "am putting it on my wall....",
                  "created_time": "2010-08-24T09:01:25+0000"  
                  },
    "context" : 

                       {
                           "type": "friends,circles"

                        }

   "payload" [ {12345},{12345} ,{2345}  ]

   }

我尝试了以下方法,但它不起作用

$decoded = json_decode($json_string);

for ($i=0;$i<payload.length;++$i)

{

$id=$decoded->payload[$i];
//do some operation with the id

}

【问题讨论】:

  • 启用错误报告。那不是 PHP。
  • 这不是有效的 JSON
  • This answer 在继续执行服务器脚本之前可能会有所帮助。
  • 你在做什么payload.length这是什么?它不是一个 php 变量。醒醒它是 php 而不是 javascript。

标签: php arrays json loops


【解决方案1】:

当你使用 json_decode 方法时,输出将是嵌套数组 因此,例如要访问上下文类型,您需要执行以下操作

echo $decoded["context"]["type"];

要循环有效载荷,您需要执行以下操作

for ($i=0;$i<$decoded["payload"].length;++$i)
{

$id=$decoded["payload"][$i];
//do some operation with the id

}

【讨论】:

  • 不确定您是如何获得支持的,但这在几个层面上都是错误的。
【解决方案2】:

首先,您提供的 JSON 无效。假设有效的应该是这样的

 {
    "RequestHeader": {
        "mess": "am putting it on my wall....",
        "created_time": "2010-08-24T09:01:25+0000"
    },
    "context": {
        "type": "friends,circles"
    },
    "payload": [
        12345,
        12345,
        2345
    ]
 }

在您解决了 JSON 提供程序的问题后,访问数据将非常容易

<?php

$json = <<<'JSON'
{
    "RequestHeader": {
        "mess": "am putting it on my wall....",
        "created_time": "2010-08-24T09:01:25+0000"
    },
    "context": {
        "type": "friends,circles"
    },
    "payload": [
        12345,
        12345,
        2345
    ]
}
JSON;

$data = json_decode($json, true);

$type = $data['context']['type'];
var_dump($type);
foreach($data['payload'] as $id) {
    var_dump($id);
}

请记住在访问数据之前确保您检查数据是否确实存在,例如isset($data['context']['type']) 除非你绝对确定它的完整性。

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2019-10-20
    相关资源
    最近更新 更多