2017-06-28 5 views
0

Ich konvertiere einige CSV-Dateien in Json mit dem JsonOutputter. In den CSV-Dateien habe ich ein Feld, das JSON wie folgt enthält (Pipe-Zeichen ist Trennzeichen): ... | {"type": "Punkt", "Koordinaten": [18.7726, 74.5091]} |Wie innere Json zu behandeln, wenn JsonOutputter

Wenn es Ausgang zu Json, das Ergebnis sieht wie folgt aus: "Location": "{\" Typ \ ": \" Punkt \ "\ "Koordinaten \": [18,7726, 74,5091]}"

I möchte die äußeren Anführungszeichen loswerden, um den JSon wie folgt aussehen zu lassen: "Location": {"type": "Punkt", "Koordinaten": [18.7726, 74.5091]}

Was ist der beste Weg um das zu erreichen? Die Ausgabe-Json wird in Cosmos DB gespeichert, also denke ich, dass das "Aufräumen" der Json entweder in U-SQL oder in Cosmos DB erfolgen könnte?

Antwort

1

Der Beispielausgeber generiert nur flache JSON. Da wir keinen JSON-Datentyp haben, muss jeder Zeichenfolgenwert als Zeichenfolgenwert maskiert werden.

Sie können Ihr eigenes benutzerdefiniertes Ausgabegerät schreiben, das zum Beispiel SqlMap-Instanzen für verschachtelte Werte übernimmt und sie als verschachtelte JSON ausgibt, oder - wenn Sie wissen, dass einige Zeichenketten in den Rowsets wirklich JSON sind und nicht nur Zeichenketten, serialisieren Zitate.

+0

Dank. Ich habe das Beispiel JsonOutputter aktualisiert und die JSON-Spalte als Roh-JSON serialisiert. –

0

Wenn JsonOutputter nicht die einzige Wahl zu diesem ist, könnten wir csv-Datei zu Json mit unserem benutzerdefinierten Code zu konvertieren. Ich teste es mit der folgenden CSV-Datei.

number|Location 
1|{ "type":"Point", "coordinates":[ 13.7726, 73.5091 ] } 
2|{ "type":"Point", "coordinates":[ 14.7726, 74.5091 ] } 

Bitte versuchen Sie den folgenden Code zu verwenden, es funktioniert auf meiner Seite korrekt.

var lines = File.ReadAllText(@"C:\Tom\tomtest.csv").Replace("\r", "").Split('\n'); 
      var csv = lines.Select(l => l.Split('|')).ToList(); 

      var headers = csv[0]; 
      var dicts = csv.Skip(1).Select(row => headers.Zip(row, Tuple.Create).ToDictionary(p => p.Item1, p => p.Item2)).ToArray().Select(x=>new 
      { 
       number = x["number"], 
       location = JObject.Parse(x["Location"]) 
      }); 

      string json = JsonConvert.SerializeObject(dicts); 
      Console.WriteLine(json); 

Testergebnis:

enter image description here

Verwandte Themen