使用PHP解析INI文件并运行JSON_DECODE

时间:2016-12-24 19:07:43

标签: php json

我希望获得一些关于如何制作执行PHP parse_ini_file的模块化代码,然后使用返回值来运行JSON解码的输入。

我有一个BACnet API,它为自动化系统中的BACnet点返回JSON结构。我编写了以下代码来解码JSON数据,只返回" present-value"字段,然后我在网页上显示该值。

<?php 
$url = "http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.0";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
echo "<b>Room temperature</b>: ". $json_data["present-value"]. " DEG F";
;?>

这很好但我想使这个代码模块化,以便它可以用于许多其他点。

我创建了一个INI文件,其中包含其他点列表以及包含API中JSON数据的URL。

## BACnet Configuration File
# BACnet Object URLs from WACNET Browser API
[bacnet]
SEA_RMT                     = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.0
SEA_SRV_SEA_SV1_01_EXHT     = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.3
SEA_SRV_SEA_SV1_02_EXHT     = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.4
SEA_SRV_SEA_SV1_03_EXHT     = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.5

我想要做的是使用INI文件获取列表中每个点的当前值,然后创建一个变量,该变量是该点的名称,并将其设置为等于&#34;本值&#34;领域。然后我可以在HTML页面上使用PHP变量引用这一点,如下所示:

<?php echo "$SEA_SRV_SEA_SV1_01_EXHT";?>

我从下面的代码开始,但它不起作用。

<?php

// Parse the settings file
$bacnetini = parse_ini_file('/var/www/config/bacnet.ini');

// Parse the keys to variables and add data
foreach ($bacnetini as $key => $value) {
    $url = $value;
    $json = file_get_contents($url);
    $json_data = json_decode($json, true);
    $$key = $json_data; 
}

?>

我很想得到关于实现这一目标的最佳方式的其他意见,因为我不知道从哪里开始。

我已经查看了其他Stack Overflow问题,但我不知道如何将这些内容整合在一起。

1 个答案:

答案 0 :(得分:0)

为什么不尝试这样的事呢?这将允许您在INI文件中创建不会影响脚本的其他部分。

<?php

$bacnetini = parse_ini_file('/var/www/config/bacnet.ini', true);

$data = array();

foreach ($bacnetini['bacnet'] as $key => $url) {
    $data[$key] = json_decode(file_get_contents($url), true);
}

var_dump($data['SEA_SRV_SEA_SV1_01_EXHT']);

?>