2016-07-27 11 views
1

ich eine JSON-Datei von dieser ähnlich mit Daten gefüllt haben:Looping durch .json Objekt

[ 
{ 
    "scan_type": "nexpose", 
    "date_time": "2016-07-18 18:21:44", 
    "source_address": "1111", 
    "source_lat": "22.555260", 
    "source_lng": "-15.084420", 
}, 
... 
] 

Und ich schrieb, hier ist mein Skript ein Skript, das diese Daten in ein Objekt konvertiert:

let obj = require('./dataOut.json'); 
var fs = require('fs'); 

//json variables 
let scan_type = obj[0].scan_type; 
let date_time = obj[0].date_time; 
let source_address = obj[0].source_address; 
let source_lat = obj[0].source_lat; 
let source_lng = obj[0].source_lng; 

//source contains the new object 
var source = { 
    id: source_lat + source_lng, 
    "source-lat": source_lat, 
    "source-lng": source_lng, 
    "source_address": source_address, 
    x: { 
     valueOf: function() { 
      var latlng = [ 
       source_lat, 
       source_lng 
      ]; 
      var xy = map.FUNCTION_FOR_CONVERTING_LAT_LNG_TO_X_Y(latlng); 
      return xy[0]; 
     } 
    }, 
    y: { 
     valueOf: function() { 
      var latlng = [ 
       source_lat, 
       source_lng 
      ]; 
      var xy = map.FUNCTION_FOR_CONVERTING_LAT_LNG_TO_X_Y(latlng); 
      return xy[1]; 
     } 
    } 
} 
//write out to file and stringify 
fs.writeFile('./parentSource.json', JSON.stringify(source, null, 2), 'utf-8'); 

Wie Sie sehen können, habe ich derzeit alles zum ersten Element [0] aus meiner Datendatei zum Testen gesetzt. Aber ich muss das ändern, wo es jedes Element durchlaufen wird.

Normalerweise würde ich nur eine foreach Schleife verwenden, aber das war nicht erfolgreich.

Wie kann ich eine Schleife hinzufügen, die durch jedes .JSON-Objekt geht und die Werte zu meinem Skript hinzufügt, so dass meine Ausgabedatei alle neu formatierten Daten enthält?

Zur Klarstellung, ich möchte das Ergebnis als Ergebnis zu einem Array in einer Datei ausgegeben werden.

Auch: mein derzeitiger Code funktioniert gut, aber nur für das erste Element [0], ich muss nur einen Weg finden, die restlichen Elemente aus dem .JSON zu durchlaufen und sie in meine Ausgabe

aufzunehmen
+1

Sie können die Funktion [JSON.parse] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) verwenden, um JSON zu JS Object zu analysieren. – 10100111001

+0

Wo ist 'Ziel' definiert? –

+0

Soll jedes Objekt separat in die Ausgabedatei geschrieben oder als JSON-Array in die Datei geschrieben werden? Kannst du klarstellen, was du erreichen willst? –

Antwort

2

Wie ich in den Kommentaren gesagt habe, versuchen Sie die forEach mit einer Pfeilfunktion. Etwas wie folgt aus:

let obj = require('./dataOut.json'); 
var fs = require('fs'); 

const source = []; 

obj.forEach(o => { 
    //json variables 
    const scan_type = o.scan_type; 
    const date_time = o.date_time; 
    const source_address = o.source_address; 
    const source_lat = o.source_lat; 
    const source_lng = o.source_lng; 

    //source contains the new object 
    source.push({ 
    id: source_lat + source_lng, 
    "source-lat": source_lat, 
    "source-lng": source_lng, 
    "source_address": source_address, 
    x: { 
     valueOf: function() { 
     var latlng = [ 
      source_lat, 
      source_lng 
     ]; 
     var xy = map.FUNCTION_FOR_CONVERTING_LAT_LNG_TO_X_Y(latlng); 
     return xy[0]; 
     } 
    }, 
    y: { 
     valueOf: function() { 
     var latlng = [ 
      source_lat, 
      source_lng 
     ]; 
     var xy = map.FUNCTION_FOR_CONVERTING_LAT_LNG_TO_X_Y(latlng); 
     return xy[1]; 
     } 
    } 
    }); 
}); 

//write out to file and stringify 
fs.writeFile('./parentSource.json', JSON.stringify(source, null, 2), 'utf-8'); 

Die o, bei jeder Iteration wird ein Element des Arrays in Ihrer ./dataOut.json-Datei sein.

+0

Das funktioniert! Gute Lösung, vielen Dank. Entschuldigung, ich habe deinen früheren Kommentar verpasst. – Edon

+1

Beachten Sie, dass ich einige Ihrer Schlüsselwörter 'var' und' let' in 'const' geändert habe. Sie sollten ein wenig über sie lesen, da es den Code leichter verständlich macht und dem Interpreter von jedem Mitglied sagt, was Sie wollen: [JavaScript ES6 Variablendeklarationen mit let und const] (https://strongloop.com/strongblog/ es6-Variablendeklarationen /). Prost. – rgoliveira