Разобрать данные json, разделенные новой строкой в ​​Nodejs - PullRequest
0 голосов
/ 19 февраля 2019

Я работал над некоторым проектом, мне нужно работать с данными JSON, разделенными новой строкой.Вот форма данных:

{"response": "True", "controllerId": "2751", "level": "INFO", "logType": "watchdogResponse", "deviceId": "2751", "container": "firmware", "epoch": "1549996256", "module": "hostServices", "ts": "2019-02-13 00:00:56"}
{"ts": "2019-02-13 00:01:10", "epoch": "1549996270", "level": "INFO", "module": "jr", "logType": "running", "controllerId": "2751", "deviceId": "2751", "rid": "EXTERNAL CALL", "val": "1549996260000"}
{"ts": "2019-02-13 00:01:10", "epoch": "1549996270", "level": "INFO", "module": "applicationMain", "logType": "wifi", "controllerId": "2751", "deviceId": "2751", "networkStrength": "100.0"}

Теперь, как я могу их проанализировать, и мне нужно отсортировать данные по их ключу.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Если я правильно понимаю, данные - это не допустимая строка JSON, а строки JSON, разделенные переносами строк.Вот как data может быть преобразовано в массив объектов с отсортированным порядком ключей:

'use strict';

const data =
`{"response": "True", "controllerId": "2751", "level": "INFO", "logType": "watchdogResponse", "deviceId": "2751", "container": "firmware", "epoch": "1549996256", "module": "hostServices", "ts": "2019-02-13 00:00:56"}
{"ts": "2019-02-13 00:01:10", "epoch": "1549996270", "level": "INFO", "module": "jr", "logType": "running", "controllerId": "2751", "deviceId": "2751", "rid": "EXTERNAL CALL", "val": "1549996260000"}
{"ts": "2019-02-13 00:01:10", "epoch": "1549996270", "level": "INFO", "module": "applicationMain", "logType": "wifi", "controllerId": "2751", "deviceId": "2751", "networkStrength": "100.0"}`;

const sortedArrayOfObjects = data
  .split('\n')
  .map(JSON.parse)
  .map(obj => Object.entries(obj).sort().reduce(
    (o, [k, v]) => (o[k] = v, o), {})
  );

console.log(sortedArrayOfObjects);
0 голосов
/ 19 февраля 2019

Если вы хотите отсортировать по дате.

let input = `{"response": "True", "controllerId": "2751", "level": "INFO", "logType": "watchdogResponse", "deviceId": "2751", "container": "firmware", "epoch": "1549996256", "module": "hostServices", "ts": "2019-02-13 00:00:56"}
{"ts": "2019-02-13 00:01:10", "epoch": "1549996270", "level": "INFO", "module": "jr", "logType": "running", "controllerId": "2751", "deviceId": "2751", "rid": "EXTERNAL CALL", "val": "1549996260000"}
{"ts": "2019-02-13 00:01:10", "epoch": "1549996270", "level": "INFO", "module": "applicationMain", "logType": "wifi", "controllerId": "2751", "deviceId": "2751", "networkStrength": "100.0"}`

let out = input.split('\n').map(JSON.parse).sort((a, b) => {
  new Date(a.ts) > new Date(b.ts);
})
console.log(out);
0 голосов
/ 19 февраля 2019

Вы можете использовать JSON.parse(), чтобы проанализировать JSON в объект JavaScript.Чтобы отсортировать данные по ключу в лексикографическом порядке, вы можете создать массив, используя Object.entries(), а затем отсортировать его, используя sort() метод массива *1008* .

let obj = JSON.parse(data)
let arr = Object.entries(obj).sort()

Где arr будет тогда массивом, содержащим пары ключ-значение (в виде массивов), отсортированные по их ключу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...