F#将json转换为csv:如何将Option <string>视为空字符串?

时间:2016-04-06 18:10:02

标签: json csv f#

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

#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

如果我取消注释最后一行代码( printfn&#34;%i;%s;%s;%s&#34; p.Id p.Name p.Company p.Address )我得到以下编译器错误:

  

这个表达式应该有类型&#39;字符串&#39;但这里是类型选项<string>

我想要实现的是以下2个CSV格式化的行:

1;User1;;Street, City
2;User2;;

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

1 个答案:

答案 0 :(得分:4)

您可以在评论中使用Tomasz提到的模式匹配。

另一种选择是使用defaultArg函数,该函数采用option<'T>和类型'T的默认值,该值在选项表示缺失值时使用。类似的东西:

for p in persons.Persons do
  printfn "%i;%s;%s;%s" p.Id p.Name (defaultArg p.Company "") (defaultArg p.Address "")