F#将json转换为csv:如何处理选项<;字符串>;作为空字符串?

F#将json转换为csv:如何处理选项<;字符串>;作为空字符串?,json,csv,f#,Json,Csv,F#,我是F#的新手,我想使用JsonProvider将简单的Json文件转换为CSV格式。这是我的F#脚本: 如何转换空字符串中的选项?您可以使用Tomasz在注释中提到的模式匹配 另一个选项是使用defaultArg函数,该函数使用选项您可以使用Tomasz在注释中提到的模式匹配 另一个选项是使用defaultArg函数,该函数接受选项这是重复的。我建议阅读fsharpforfunandproit.com上的“选项类型”和“匹配表达式”或MSDN上的文档。这是重复的。我建议您阅读fsharpfor

我是F#的新手,我想使用JsonProvider将简单的Json文件转换为CSV格式。这是我的F#脚本:


如何转换空字符串中的选项?

您可以使用Tomasz在注释中提到的模式匹配


另一个选项是使用
defaultArg
函数,该函数使用
选项您可以使用Tomasz在注释中提到的模式匹配


另一个选项是使用
defaultArg
函数,该函数接受
选项这是重复的。我建议阅读fsharpforfunandproit.com上的“选项类型”和“匹配表达式”或MSDN上的文档。这是重复的。我建议您阅读fsharpforfunandproit.com上的“选项类型”和“匹配表达式”或MSDN上的文档。感谢您的Tomas,我发现
defaultArg
更适合我的需要,因为我不必对Json文件中所有可能为空的字段进行模式匹配。在对Company和Address使用
defaultArg
后,我发现Company字段出现了一个新问题。因为Json中的company元素都没有值,编译器抱怨说类型是
IJsonDocument
,而不是printfn(me)假设的
string-option
。我该如何解决这个问题?嗯,在这种情况下,最好的选择可能是修改您的示例,使其包含一个具有有效值的元素。谢谢您的Tomas,我发现
defaultArg
更适合我的需要,因为我不必对Json文件中所有可能为空的字段进行模式匹配。在对Company和Address使用
defaultArg
后,我发现Company字段出现了一个新问题。因为Json中的company元素都没有值,编译器抱怨说类型是
IJsonDocument
,而不是printfn(me)假设的
string-option
。我如何解决这个问题?嗯,在这种情况下,最好的选择可能是修改您的示例,使其包含一个具有有效值的元素。
#r "./lib/FSharp.Data.dll"
open FSharp.Data

type Persons = JsonProvider<""" {
  "persons": [
    {
      "id": "1",
      "name": "User1",
      "company": "",
      "address": "Streed, City"
    },
    {
      "id": "2",
      "name": "User2",
      "company": "",
      "address": ""
    }
  ]
} """>
let persons = Persons.GetSample()

for p in persons.Persons do
  printfn "%i;%s" p.Id p.Name
//  printfn "%i;%s;%s;%s" p.Id p.Name p.Company p.Address
1;User1;;Street, City
2;User2;;
for p in persons.Persons do
  printfn "%i;%s;%s;%s" p.Id p.Name (defaultArg p.Company "") (defaultArg p.Address "")