2017-06-28 32 views
0

我使用JsonOutputter將一些csv文件轉換爲Json。在csv文件中,我有一個字段包含像這樣的Json(管道字符是分隔符): ... | {「type」:「Point」,「coordinates」:[18.7726,74.5091]} | ...如何使用JsonOutputter處理內部Json

當它輸出到JSON,結果是這樣的: 「位置」: 「{\」 類型\ 「:\」 點\ 「\ 」座標\「:18.7726,74.5091]}」

我想要擺脫外部引號使Json看起來像這樣: 「位置」:{「type」:「Point」,「coordinates」:[18.7726,74.5091]}

什麼是最佳方式完成這個?輸出Json將存儲在Cosmos DB中,所以我猜Json的「清理」可以在U-SQL或Cosmos DB中完成?

回答

1

示例輸出器僅生成平坦的JSON。由於我們沒有JSON數據類型,因此任何字符串值都必須轉義爲字符串值。

您可以編寫自己的自定義Outputter,例如爲嵌套值獲取SqlMap實例並將它們輸出爲嵌套JSON,或者 - 如果您知道行集中的某些字符串實際上是JSON而不是字符串,則不需要引號。

+0

感謝。我更新了示例JsonOutputter並將JSON列作爲原始JSON序列化。 –

0

如果JsonOutputter不是 的唯一選擇,我們可以用我們的自定義代碼將csv文件轉換爲Json。 我用下面的csv文件測試它。

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

請嘗試使用下面的代碼,它在我身邊正常工作。

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

測試結果:

enter image description here