You JSON output structure isn't valid JSON.
data: [
{ dateRecorded: '2018-03-31 10:00:00', sensor1: 34.2, sensor2: 83.1 },
{ dateRecorded: '2018-03-31 10:05:00', sensor1: 65.2, sensor2: 44.5 }
]
This one is a valid JSON structure so this is what i aim for in mine answer.
{
"data": [{
"dateRecorded": "2018-03-31 10:00:00",
"sensor1": 34.2,
"sensor2": 83.1
}, {
"dateRecorded": "2018-03-31 10:05:00",
"sensor1": 65.2,
"sensor2": 44.5
}]
}
This is possible with pure MySQL only.
create table/insert data
CREATE TABLE Table1
(`id` int, `sensorId` int, `dateRecorded`datetime, `tempF` double)
;
INSERT INTO Table1
(`id`, `sensorId`, `dateRecorded`, `tempF`)
VALUES
(1, 1, '2018-03-31 10:00:00', 34.2),
(2, 2, '2018-03-31 10:00:00', 83.1),
(3, 2, '2018-03-31 10:05:00', 44.5),
(4, 1, '2018-03-31 10:05:00', 65.2)
;
To generate the inner JSON structure with MySQL like
{
"dateRecorded": "2018-03-31 10:00:00",
"sensor1": 34.2,
"sensor2": 83.1
}, {
"dateRecorded": "2018-03-31 10:05:00",
"sensor1": 65.2,
"sensor2": 44.5
}
You need to make use of the functions CONCAT and GROUP_CONCAT to generate the JSON strings.
Query
SELECT
CONCAT (
'{'
, '"dateRecorded": ', '"', Table1.dateRecorded, '"'
, ','
, GROUP_CONCAT(
CONCAT(
'"sensor', Table1.sensorId, '":', Table1.tempF
)
ORDER BY
Table1.id ASC
)
, '}'
)
AS json_data_records
FROM
Table1
GROUP BY
Table1.dateRecorded
ORDER BY
Table1.dateRecorded ASC
Result
| json_data_records |
|-----------------------------------------------------------------------|
| {"dateRecorded": "2018-03-31 10:00:00","sensor1":34.2,"sensor2":83.1} |
| {"dateRecorded": "2018-03-31 10:05:00","sensor2":44.5,"sensor1":65.2} |
see demo http://www.sqlfiddle.com/#!9/d6db452/6
p.s the order off sensor1 and sensor2 in the second record are reversed.
because off ORDER BY id ASC within the GROUP_CONCAT function.
Beside This order exists within the source data.
To generate the complete JSON like
{
"data": [{
"dateRecorded": "2018-03-31 10:00:00",
"sensor1": 34.2,
"sensor2": 83.1
}, {
"dateRecorded": "2018-03-31 10:05:00",
"sensor1": 65.2,
"sensor2": 44.5
}]
}
We need the change the existing query so it's using CONCAT and GROUP_CONCAT to merge the last output.
Query
SELECT
CONCAT(
'{'
, '"data": ['
, GROUP_CONCAT(json_records.json)
, ']'
, '}'
)
AS json
FROM (
SELECT
CONCAT (
'{'
, '"dateRecorded": ', '"', Table1.dateRecorded, '"'
, ','
, GROUP_CONCAT(
CONCAT(
'"sensor', Table1.sensorId, '":', Table1.tempF
)
ORDER BY
Table1.id ASC
)
, '}'
)
AS json
FROM
Table1
GROUP BY
Table1.dateRecorded
ORDER BY
Table1.dateRecorded ASC
)
AS json_records
Result
| json |
|---------------------------------------------------------------------------------------------------------------------------------------------------------|
| {"data": [{"dateRecorded": "2018-03-31 10:00:00","sensor1":34.2,"sensor2":83.1},{"dateRecorded": "2018-03-31 10:05:00","sensor2":44.5,"sensor1":65.2}]} |
see demo http://www.sqlfiddle.com/#!9/d6db452/19