在php中将字符串行转换为数据
我有一个json数据文件,它是从云中获取的,如下所示:在php中将字符串行转换为数据,php,sql,json,Php,Sql,Json,我有一个json数据文件,它是从云中获取的,如下所示: { "timestamp":1526005337995, "data":[ { "_id":"ByWpiEKaM", "data":"N12E00008", "raw":[78,49,50,69,48,48,48,48,56], "timestamp":1525398457512 }, }]} 该文件是从Arduino微控制器
{
"timestamp":1526005337995,
"data":[
{
"_id":"ByWpiEKaM",
"data":"N12E00008",
"raw":[78,49,50,69,48,48,48,48,56],
"timestamp":1525398457512
},
}]}
该文件是从Arduino微控制器存储传感器数据并通过网关发送到云的地方。我试图理解如何转换数据字符串“N12E0008”,其中N12是项目ID,E表示湿度(我们还有G表示温度)。last 2位数字(08)表示从传感器中提取的值(8%湿度,例如)
我是JSON新手,我也知道您可以将数据应用到$variable中并对其进行解码,但是,分解“N12E0008”字符串的过程是什么,web应用程序可以识别字符串的哪个部分是数据和信息。我正在使用mySql作为数据库,并且正在尝试编写一个php脚本来自动解码数据的值 首先,请注意您的json格式不正确,php不会对其进行解码,正确的格式如下:
{
"timestamp":1526005337995,
"data":[
{
"_id":"ByWpiEKaM",
"data":"N12E00008",
"raw":[78,49,50,69,48,48,48,48,56],
"timestamp":1525398457512
}
]
}
先用json_解码为变量解码json
$data = json_decode($fetched_data);
然后用一些regexp解析数据
perg_match('/(?<project_id>^\w{3})(?<type>[EG])(?<value>\d+$)/', $data->data[0]->data, $projectData);
我在我的regexp上使用命名组,php将使用组名对结果数组进行索引,因此您可以通过regexp上隐含的名称访问数组。每当我需要做这样简单的解析器时,我都会使用这种技术。我假设格式错误的json是复制粘贴错误。
如果不是的话,你需要在Arduino中处理这个问题。您可以在PHP中对错误进行修补,但最好在问题所在的位置更正问题 然后,拆分您拥有的字符串就是简单的字符串解析。
您不需要使用花哨的正则表达式函数来消耗内存 我使用substr()和list()只是为了使它成为一行。相同的代码可能出现在三行或更多行上,但我认为这都是解析,所以为什么要将它们分开。
我还使用三元if将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
您可以在此处看到正在运行的代码:发布的答案有问题吗?很抱歉回复太晚!我已经在json文件中理解并调整了相应的内容,您的回答非常有帮助!谢谢:)谢谢你的解释:)你的回答帮助我了解json现在是如何工作的
$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)];