Azure cosmosdb 使用JsonOutputter时如何处理内部Json

Azure cosmosdb 使用JsonOutputter时如何处理内部Json,azure-cosmosdb,azure-data-lake,u-sql,Azure Cosmosdb,Azure Data Lake,U Sql,我正在使用JsonOutputter将一些csv文件转换为Json。在csv文件中,我有一个包含Json的字段,如下所示(管道字符是分隔符): …|{“类型”:“点”,“坐标”:[18.7726,74.5091]} 当输出到Json时,结果如下所示: “位置:“{\'类型\':\'点\',\'坐标\':[18.7726,74.5091]}” 我想去掉外部引号,使Json看起来像这样: “位置”:{“类型”:“点”,“坐标”:[18.7726,74.5091]} 实现这一目标的最佳方式是什么?输出

我正在使用JsonOutputter将一些csv文件转换为Json。在csv文件中,我有一个包含Json的字段,如下所示(管道字符是分隔符): …|{“类型”:“点”,“坐标”:[18.7726,74.5091]}

当输出到Json时,结果如下所示: “位置:“{\'类型\':\'点\',\'坐标\':[18.7726,74.5091]}”

我想去掉外部引号,使Json看起来像这样: “位置”:{“类型”:“点”,“坐标”:[18.7726,74.5091]}


实现这一目标的最佳方式是什么?输出Json将存储在Cosmos DB中,因此我猜Json的“清理”可以在U-SQL或Cosmos DB中完成。

示例输出程序只生成平面Json。因为我们没有JSON数据类型,所以必须将任何字符串值转义为字符串值


您可以编写自己的自定义输出程序,例如,将SqlMap实例作为嵌套值输出,并将其作为嵌套JSON输出,或者-如果您知道行集中的某些字符串实际上是JSON而不仅仅是字符串,请在不使用引号的情况下序列化它们。

如果JSONOUTPUTER不是唯一的选择 ,我们可以使用自定义代码将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);
测试结果:


谢谢。我更新了示例JSONOUTPUTER,并将JSON列序列化为原始JSON。