我正在尝试解码一系列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;
答案 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"];