我有一个从云端获取的json数据文件:
{
"timestamp":1526005337995,
"data":[
{
"_id":"ByWpiEKaM",
"data":"N12E00008",
"raw":[78,49,50,69,48,48,48,48,56],
"timestamp":1525398457512
},
}]}
该文件是传感器数据从Arduino微控制器存储并使用网关发送到云的地方。我试图了解如何转换数据字符串" N12E00008",其中N12是项目ID , E for Moisture (我们还温度为G)。并且l ast 2位(08)表示从传感器中提取的值( 8%湿度,例如)。
我是JSON的新手,我也知道您可以将数据应用到$变量并对其进行解码,但是,分解" N12E00008&#34的程序是什么? ; web应用程序可以识别字符串的哪个部分是数据和信息的字符串。我正在使用mySql作为数据库,并且正在尝试编写一个php脚本来自动解码数据的值。
答案 0 :(得分:1)
我认为格式错误的json是一个复制粘贴错误 如果不是,你需要在Arduino中照顾它。您可以在PHP中修补错误,但更好地解决问题所在的问题。
然后分割你所拥有的字符串就是简单的字符串解析 你不需要使用花哨的正则表达式函数来消耗内存。
我使用substr()和list()只是为了使它成为一个衬里。相同的代码可以在三行或更多行上,但我认为它们都解析了所以为什么要将它们分开。
如果将E转换为水分,我也使用三元。
$arr = json_decode($json, 1);
list($project, $sensor, $percentage) = [substr($arr['data'][0]['data'],0,3), (substr($arr['data'][0]['data'],4,1) == 'E' ? 'Moisture':'Temperature'), substr($arr['data'][0]['data'],-2)];
现在您有三个变量$project
$sensor
$percentage
。
您可以在此处查看代码:
https://3v4l.org/im38c
答案 1 :(得分:0)
首先,请注意您的json格式错误,并且它不会被php解码,正确的形式是这个:
{
"timestamp":1526005337995,
"data":[
{
"_id":"ByWpiEKaM",
"data":"N12E00008",
"raw":[78,49,50,69,48,48,48,48,56],
"timestamp":1525398457512
}
]
}
使用json_decode将json解码为变量
$data = json_decode($fetched_data);
然后用一些正则表达式解析你的数据
perg_match('/(?<project_id>^\w{3})(?<type>[EG])(?<value>\d+$)/', $data->data[0]->data, $projectData);
然后,您可以将$ projectData变量中的数据作为数组访问。
$id = $data['project_id'];
$type = $data['type'];
$value = (int) $data['value'];
我在我的正则表达式上使用命名组,php将使用组名索引生成的数组,因此您可以通过regexp上隐含的名称访问数组。每当我需要做这样简单的解析器时,我就会使用这种技术。