使用 JsonOutputter 时如何处理内部 Json
How to handle inner Json when using JsonOutputter
我正在使用 JsonOutputter 将一些 csv 文件转换为 Json。在 csv 文件中,我有一个包含 Json 的字段,如下所示(管道字符是定界符):
...|{ "type":"Point", "coordinates":[ 18.7726, 74.5091 ] }|...
输出到Json时,结果是这样的:
"Location": "{ \"type\":\"Point\", \"coordinates\":[ 18.7726, 74.5091 ] }"
我想去掉外部引号,使 Json 看起来像这样:
"Location": { "type":"Point", "coordinates":[ 18.7726, 74.5091 ] }
完成此任务的最佳方法是什么?输出 Json 将存储在 Cosmos DB 中,所以我猜 Json 的 "cleaning up" 可以在 U-SQL 或 Cosmos DB 中完成?
示例输出器仅生成平面 JSON。由于我们没有 JSON 数据类型,任何字符串值都必须转义为字符串值。
您可以编写自己的自定义输出器,例如将 SqlMap 实例用于嵌套值并将它们输出为嵌套 JSON,或者 - 如果您知道行集中的某些字符串确实 JSON而不仅仅是字符串,不带引号将它们序列化。
如果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);
测试结果:
我正在使用 JsonOutputter 将一些 csv 文件转换为 Json。在 csv 文件中,我有一个包含 Json 的字段,如下所示(管道字符是定界符): ...|{ "type":"Point", "coordinates":[ 18.7726, 74.5091 ] }|...
输出到Json时,结果是这样的: "Location": "{ \"type\":\"Point\", \"coordinates\":[ 18.7726, 74.5091 ] }"
我想去掉外部引号,使 Json 看起来像这样: "Location": { "type":"Point", "coordinates":[ 18.7726, 74.5091 ] }
完成此任务的最佳方法是什么?输出 Json 将存储在 Cosmos DB 中,所以我猜 Json 的 "cleaning up" 可以在 U-SQL 或 Cosmos DB 中完成?
示例输出器仅生成平面 JSON。由于我们没有 JSON 数据类型,任何字符串值都必须转义为字符串值。
您可以编写自己的自定义输出器,例如将 SqlMap 实例用于嵌套值并将它们输出为嵌套 JSON,或者 - 如果您知道行集中的某些字符串确实 JSON而不仅仅是字符串,不带引号将它们序列化。
如果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);
测试结果: