2017-06-28 5 views
0

JsonOutputterを使用していくつかのcsvファイルをJsonに変換しています。 CSVファイルでは、このようなJsonを含むフィールド(パイプ文字は区切り文字です): ... | {"タイプ": "ポイント"、 "座標":[18.7726,74.5091] | ...JsonOutputterを使用する場合の内部Jsonの処理方法

それはJSONに出力だと、結果は以下のようになります。私は

"場所": "{\" タイプ\ ":\" ポイント\ "\ "座標\"[18.7726、74.5091]}" "場所":{"タイプ": "ポイント"、 "座標":[18.7726,74.5091]}

何が最善の方法ですこれを達成するために?出力JsonはCosmos DBに格納されるので、Jsonの「クリーンアップ」はU-SQLまたはCosmos DBで実行できると思いますか?

答えて

1

サンプル出力機はフラットなJSONを生成しています。 JSONデータ型はないので、文字列値はすべて文字列値にエスケープする必要があります。

ネストされた値の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

関連する問題