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

测试结果: