在php中将字符串行转换为数据

在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微控制器

我有一个json数据文件,它是从云中获取的,如下所示:

{
    "timestamp":1526005337995,
    "data":[
        {
        "_id":"ByWpiEKaM",
        "data":"N12E00008",
        "raw":[78,49,50,69,48,48,48,48,56],
        "timestamp":1525398457512
        },
 }]}
该文件是从Arduino微控制器存储传感器数据并通过网关发送到云的地方。我试图理解如何转换数据字符串“N12E0008”,其中N12是项目IDE表示湿度(我们还有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)];