在PHP中解码具有不同标头的JSON字符串

时间:2014-08-13 20:54:11

标签: php json

我正在尝试解码一系列JSON消息

JSON messgaes是在特定基础上收到的

如果JSON消息的格式完全相同,我会很好。但他们不是。

以下是两种不同类型的示例。

   object(stdClass)#11 (1) { ["SF_MSG"]=> object(stdClass)#12 (5) { ["time"]=>      string(13) "1407962618000" ["area_id"]=> string(2) "NM" ["address"]=> string(2) "2B" ["msg_type"]=> string(2) "SF" ["data"]=> string(2) "FE" } } 

   object(stdClass)#13 (1) { ["CA_MSG"]=> object(stdClass)#14 (5) { ["to"]=> string(4) "0360" ["time"]=> string(13) "1407962618000" ["area_id"]=> string(2) "WH" ["msg_type"]=> string(2) "CC" ["descr"]=> string(4) "2S30" } } 

一个有SF_MSG的标题,另一个有CC_MSG

我的问题是"我如何在PHP中区分不同的标题,以便我可以用不同的方式阅读它们

例如echo' $ Decodedjson-> SF_MSG-> time;将回应第一个和第二个时间 echo $ Decodedjson-> CC_MSG-> to;将回显变量。但是,在执行该任务之前,我需要知道标头是SF_MSG还是CC_MSG。

如何阅读标题??????即它是CC_MSG还是SF_MSG ...... $ Decodedjson-> ?????

由于

修改

              if ($con->hasFrame()){
              $msg=$con->readFrame();
              foreach (json_decode($msg->body) as $event) {

              if(isset($event['SFG_MSG'])) {
              $aid=($event->SF_MSG->area_id);
              }
              elseif(isset($event['CA_MSG'])) {
              $aid=($event->CA_MSG->area_id);
              }

              echo $aid;

1 个答案:

答案 0 :(得分:2)

json_decode()要求将true作为第二个参数,以使结果对象成为关联数组。

foreach (json_decode($msg->body, true) as $event)

一旦你这样做,$ event将是一个关联数组,不再是一个对象,所以你需要更改你的代码的其余部分来访问$ event作为数组而不是对象。

 // this won't work
 $aid=($event->SF_MSG->area_id);

 // change to this
 $aid = $event["SF_MSG"]["area_id"];