0
votes

Analysez les données JSON séparées par une nouvelle ligne dans NODEJS

J'ai travaillé sur un projet que je dois travailler sur des données JSON séparées par une nouvelle ligne. Voici la forme des données:

{"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 commentaires

Par quelle clé les données doivent être triées?


Pas par une touche, comme toutes les touches ne sont pas dans la commande triée ex: {A = "1", b = "2", c = "3"} {b: "2", A = "1", C = "3"} Ce que je veux, c'est que ce fichier est devenu: {A = "1", b = "2", c = "3"} a = "1", b = "2", c = "3"}


J'ai mis à jour ma réponse pour ordre de clés trié.


3 Réponses :


0
votes

Vous pouvez utiliser JSON .parse () code> pour analyser JSON dans un objet JavaScript. Pour trier les données par leur clé dans l'ordre lexicographique, vous pouvez créer un tableau en utilisant objet.entries () code> puis triez-le à l'aide de TRY (CODE> TRY () CODE> MÉTHODE .

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


0 commentaires

0
votes

Si je comprends correctement, les données ne sont pas une chaîne JSON valide, mais plutôt des chaînes JSON séparées par des pauses de ligne. Il s'agit donc de savoir comment les données code> peuvent être converties dans la matrice d'objets avec la commande de clé triée:

p>

'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);


3 commentaires

Je veux travailler sur toutes les valeurs essentielles, pas seulement le "TS". Pouvez-vous m'aider à convertir le fichier JSON non valide au fichier JSON approprié


Vous pouvez essayer ceci: const validjson = '[' + data.replace (/ \ n + (? = \ {) / G, ', \ n') + ']'; . Ensuite, vous pouvez analyser: const ArrayofObjects = json.parse (validjson);


const validjson = data.replace (/ \ n + (? = \ {) / g, ', \ n'); ^ TypeError: Impossible de lire la propriété 'Remplacer' de non définie



0
votes

En supposant que vous voulez trier à l'aide de la date.

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);


1 commentaires

Malheureusement, une fonction de tri renvoie toujours non défini . Et même avec explicite retour , il retournerait true ou false au lieu de requis -1 , 1 < / code> ou 0 .