如何使用PHP重现特定的JSON文档

时间:2016-09-12 11:07:23

标签: php mysql json

我一直试图解决我的问题好几天,但没有得到干扰结果。这是JSON文件的特定结构:

{
  "detections": {
    "timestamp": "12/04/2016/ 20:25:00",
    "rooms": [
       {
        "name": "r1",
        "sensors": [
              {
                 "id": 10,
                 "type": "rad",
                 "value": 100,
                 "valMax": 600,
                 "valMin": 100
              },
              {
                 "id": 12,
                 "type": "temp",
                 "value": 30.5,
                 "valMax": 1000,
                 "valMin": 0
              }
           ]
       },
    {
      "name": "r2",
      "sensors": [
             {
                 "id": 20,
                 "type": "temp",
                 "value": 20.7,
                 "valMax": 1000,
                 "valMin": 0
             },
             {
                 "id": 15,
                 "type": "rad",
                 "value": 800,
                 "valMax": 600,
                 "valMin": 100
             }
         ]
      }
    ]
 }
}

我必须使用从MySQL数据库检索到的结构数据进行编码。 它由三个与外键约束相关联的表组成。现在,我为此编写的代码如下:

while($row = mysqli_fetch_array($result)) {
     array_push($detections, array("timestamp"=>$row['timestamp'],
                      "rooms"=>array("name"=>$row['name'], 
                      "sensors"=>array("id"=>$row['id'], "type"=>$row['type'], "value"=>$row['value'], "valMin"=>$row['valMin'],
                      "valMax"=>$row['valMax']))
                ));
}

但它给了我这个结果:

{
  "detections": [{
    "timestamp": "2016-09-10 17:59:06",
    "rooms": {
        "name": "Stanza dei Giochi",
        "sensors": {
            "id": "1",
            "type": "prova2",
            "value": "12",
            "valMin": "1",
            "valMax": "12"
        }
    }
}, {
    "timestamp": "2016-09-11 00:41:21",
    "rooms": {
        "name": "Stanza dei Giochi",
        "sensors": {
            "id": "1",
            "type": "prova2",
            "value": "21",
            "valMin": "1",
            "valMax": "12"
        }
    }
}, {
    "timestamp": "2016-09-10 19:59:20",
    "rooms": {
        "name": "Stanza dei Giochi",
        "sensors": {
            "id": "3",
            "type": "prova",
            "value": "13",
            "valMin": "11",
            "valMax": "13"
        }
    }
}, {
    "timestamp": "2016-09-11 00:41:21",
    "rooms": {
        "name": "Stanza dei Giochi",
        "sensors": {
            "id": "3",
            "type": "prova",
            "value": "23.5",
            "valMin": "11",
            "valMax": "13"
        }
    }
}] 
}

类似但不相同:/

正如我从JSON结构中注意到的那样,我会得到具有相同时间戳但具有不同房间,传感器和值的检测被收集在一起......但我不知道如何实现这一点。

希望你们都能帮助我,谢谢>。<

1 个答案:

答案 0 :(得分:0)

您正在构建错误的数组以实现该结构。

要实现所需的结构,您的阵列需要看起来像这样

<?php
array (
  'detections' => 
  array (
    'timestamp' => '12/04/2016/ 20:25:00',
    'rooms' => 
    array (
      0 => 
      array (
        'name' => 'r1',
        'sensors' => 
        array (
          0 => 
          array (
            'id' => 10,
            'type' => 'rad',
            'value' => 100,
            'valMax' => 600,
            'valMin' => 100,
          ),
          1 => 
          array (
            'id' => 12,
            'type' => 'temp',
            'value' => 30.5,
            'valMax' => 1000,
            'valMin' => 0,
          ),
        ),
      ),
      1 => 
      array (
        'name' => 'r2',
        'sensors' => 
        array (
          0 => 
          array (
            'id' => 20,
            'type' => 'temp',
            'value' => 20.699999999999999,
            'valMax' => 1000,
            'valMin' => 0,
          ),
          1 => 
          array (
            'id' => 15,
            'type' => 'rad',
            'value' => 800,
            'valMax' => 600,
            'valMin' => 100,
          ),
        ),
      ),
    ),
  ),
);

选中并检查json_decodejson_encode