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 Réponses :
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()
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 p> code> peuvent être converties dans la matrice d'objets avec la commande de clé triée:
'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);
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') + ']'; code>. Ensuite, vous pouvez analyser:
const ArrayofObjects = json.parse (validjson); code>
const validjson = data.replace (/ \ n + (? = \ {) / g, ', \ n'); ^ TypeError: Impossible de lire la propriété 'Remplacer' de non définie
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);
Malheureusement, une fonction de tri renvoie toujours non défini code>. Et même avec explicite
retour code>, il retournerait
true code> ou
false code> au lieu de requis
-1 code>,
1 < / code> ou
0 code>.
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é.