使用 javascript 和 php 分解 JSON 字符串并将值输入 MYSQL
breaking down a JSON string and inputting values into MYSQL using javascript and php
我已经通读了一些问题,但它们要么是为不同的语言编写的,要么是为了在网页中解决而编写的,
我正在使用 node-red 接收 BLE 数据,但数据来自 1 个长字符串,我正在接收以下内容:
string
[{"timestamp":"2020-02-
24T13:44:57Z","type":"Gateway","mac":"AC233FC02D95","gatewayFree":96,"gatewayLoad":0.08}
{"timestamp":"2020-02-24T13:44:59Z","type":"iBeacon","mac":"DB1265E96B6F","bleName":"","ibeaconUuid":"ACFD065EC3C011E39BBE1A514 932AC01","ibeaconMajor":1,"ibeaconMinor":2,"rssi":-51,"ibeaconTxPower":-54,"battery":0}
{"timestamp":"2020-02-24T13:44:59Z","type":"iBeacon","mac":"F0728DEB0B9B","bleName":"","ibeaconUuid":"ACFD065EC3C011E39BBE1A514932AC01","ibeaconMajor":5,"ibeaconMinor":1,"rssi":-30,"ibeaconTxPower":-62,"battery":0}]
我的目标是按照以下格式将数据输入到node-red
网关-Mac,IbeaconMinor,mac,rssi
我以前确实使用过不同的收集器来收集数据,它给了我以下格式的字符串
$GPRP,AC233FC02D95,FE2279DCB92B,-70,0201061AFF4C000215ACFD065EC3C011E39BBE1A514932AC0100050003C2
输入的是单独收集的 BLE 设备数据,而不是一个长 JSON 字符串,因此更容易转换和输入。
所以我的问题是如何将它从
更改为
string
[{"timestamp":"2020-02-
24T13:44:57Z","type":"Gateway","mac":"AC233FC02D95","gatewayFree":96,"gatewayLoad":0.08}
{"timestamp":"2020-02-24T13:44:59Z","type":"iBeacon","mac":"DB1265E96B6F","bleName":"","ibeaconUuid":"ACFD065EC3C011E39BBE1A514 932AC01","ibeaconMajor":1,"ibeaconMinor":2,"rssi":-51,"ibeaconTxPower":-54,"battery":0}
{"timestamp":"2020-02-24T13:44:59Z","type":"iBeacon","mac":"F0728DEB0B9B","bleName":"","ibeaconUuid":"ACFD065EC3C011E39BBE1A514932AC01","ibeaconMajor":5,"ibeaconMinor":1,"rssi":-30,"ibeaconTxPower":-62,"battery":0}]
至
string
[{"timestamp":"2020-02-
24T13:44:57Z","type":"Gateway","mac":"AC233FC02D95","gatewayFree":96,"gatewayLoad":0.08}
{2020-02-24T13:44:59Z,DB1265E96B6F,ACFD065EC3C011E39BBE1A514932AC01",1,2,-51,-54,0}
{2020-02-24T13:44:59Z,F0728DEB0B9B,ACFD065EC3C011E39BBE1A514932AC01,5,1,-30,-62,0}]
或者如何按以下格式将其输入mysql
作为 mysql 字符串
AC233FC02D95,F0728DEB0B9B51,1,-30
和
AC233FC02D95,DB1265E96B6F,2,-51
在更换硬件之前,我输入了这样的字符串,但是使用新的 json 格式,我不确定要在代码中更改什么
GPRP,AC233FC02D95,FE2279DCB92B,-70,0201061AFF4C000215ACFD065EC3C011E39BBE1A514932AC0100050003C2
var raw = msg.payload;
msg.length = raw.length;
msg.raw = raw;
var data = {};
data.major = raw.slice(-10,-4);
data.mac = raw.substring(5,17);
data.hostname = raw.substring(18,30);
data.minor = raw.slice(-8,-4);
data.rssi = raw.substring(31,34)
var str = data.hostname;
var location = str.replace(`AC233FC02D95`, `PURPLE`)
var beacon = parseInt(data.minor ,16);
var msg = {
topic : "INSERT INTO `test`.`track` (`location`,`beacon`, `mac`,`rssi`)
VALUES ('"+location+"','"+beacon+"', '"+data.mac+"','"+data.rssi+"');"
}
return msg;
只需将带有字符串有效负载的消息通过 JSON 节点传递,它会将其解析为 JSON 对象,然后您可以正常访问这些字段。
尽管从您发布的内容来看,数组条目似乎缺少 ,
个分隔符。
从那里您可以构建任何您想要的字符串或将字段直接插入数据库。
我已经通读了一些问题,但它们要么是为不同的语言编写的,要么是为了在网页中解决而编写的,
我正在使用 node-red 接收 BLE 数据,但数据来自 1 个长字符串,我正在接收以下内容:
string
[{"timestamp":"2020-02-
24T13:44:57Z","type":"Gateway","mac":"AC233FC02D95","gatewayFree":96,"gatewayLoad":0.08}
{"timestamp":"2020-02-24T13:44:59Z","type":"iBeacon","mac":"DB1265E96B6F","bleName":"","ibeaconUuid":"ACFD065EC3C011E39BBE1A514 932AC01","ibeaconMajor":1,"ibeaconMinor":2,"rssi":-51,"ibeaconTxPower":-54,"battery":0}
{"timestamp":"2020-02-24T13:44:59Z","type":"iBeacon","mac":"F0728DEB0B9B","bleName":"","ibeaconUuid":"ACFD065EC3C011E39BBE1A514932AC01","ibeaconMajor":5,"ibeaconMinor":1,"rssi":-30,"ibeaconTxPower":-62,"battery":0}]
我的目标是按照以下格式将数据输入到node-red
网关-Mac,IbeaconMinor,mac,rssi
我以前确实使用过不同的收集器来收集数据,它给了我以下格式的字符串
$GPRP,AC233FC02D95,FE2279DCB92B,-70,0201061AFF4C000215ACFD065EC3C011E39BBE1A514932AC0100050003C2
输入的是单独收集的 BLE 设备数据,而不是一个长 JSON 字符串,因此更容易转换和输入。
所以我的问题是如何将它从
更改为string
[{"timestamp":"2020-02-
24T13:44:57Z","type":"Gateway","mac":"AC233FC02D95","gatewayFree":96,"gatewayLoad":0.08}
{"timestamp":"2020-02-24T13:44:59Z","type":"iBeacon","mac":"DB1265E96B6F","bleName":"","ibeaconUuid":"ACFD065EC3C011E39BBE1A514 932AC01","ibeaconMajor":1,"ibeaconMinor":2,"rssi":-51,"ibeaconTxPower":-54,"battery":0}
{"timestamp":"2020-02-24T13:44:59Z","type":"iBeacon","mac":"F0728DEB0B9B","bleName":"","ibeaconUuid":"ACFD065EC3C011E39BBE1A514932AC01","ibeaconMajor":5,"ibeaconMinor":1,"rssi":-30,"ibeaconTxPower":-62,"battery":0}]
至
string
[{"timestamp":"2020-02-
24T13:44:57Z","type":"Gateway","mac":"AC233FC02D95","gatewayFree":96,"gatewayLoad":0.08}
{2020-02-24T13:44:59Z,DB1265E96B6F,ACFD065EC3C011E39BBE1A514932AC01",1,2,-51,-54,0}
{2020-02-24T13:44:59Z,F0728DEB0B9B,ACFD065EC3C011E39BBE1A514932AC01,5,1,-30,-62,0}]
或者如何按以下格式将其输入mysql 作为 mysql 字符串
AC233FC02D95,F0728DEB0B9B51,1,-30
和
AC233FC02D95,DB1265E96B6F,2,-51
在更换硬件之前,我输入了这样的字符串,但是使用新的 json 格式,我不确定要在代码中更改什么
GPRP,AC233FC02D95,FE2279DCB92B,-70,0201061AFF4C000215ACFD065EC3C011E39BBE1A514932AC0100050003C2
var raw = msg.payload;
msg.length = raw.length;
msg.raw = raw;
var data = {};
data.major = raw.slice(-10,-4);
data.mac = raw.substring(5,17);
data.hostname = raw.substring(18,30);
data.minor = raw.slice(-8,-4);
data.rssi = raw.substring(31,34)
var str = data.hostname;
var location = str.replace(`AC233FC02D95`, `PURPLE`)
var beacon = parseInt(data.minor ,16);
var msg = {
topic : "INSERT INTO `test`.`track` (`location`,`beacon`, `mac`,`rssi`)
VALUES ('"+location+"','"+beacon+"', '"+data.mac+"','"+data.rssi+"');"
}
return msg;
只需将带有字符串有效负载的消息通过 JSON 节点传递,它会将其解析为 JSON 对象,然后您可以正常访问这些字段。
尽管从您发布的内容来看,数组条目似乎缺少 ,
个分隔符。
从那里您可以构建任何您想要的字符串或将字段直接插入数据库。