2017-05-28 31 views

回答

4

JsonProvier提供了一些方法,用于解析运行时提供的数据转换成由提供的类型提供的数据类型:

//Load from named file/website 
member this.Load(uri: string): this.Root[] 
//Load data from stream source 
member this.Load(reader: System.IO.TextReader): this.Root[] 
member this.Load(stream: System.IO.Stream): this.Root[] 

//Load data from named file/website (async) 
member this.AsyncLoad(uri: string): Async<this.Root[]> 

//Load data directly from string 
member this.Parse(text: string): this.Root[] 

这些将所有相关数据加载到从所述静态参数所产生的类型的数组类型提供者的类型。例如:

open FSharp.Data 

type TypeA = JsonProvider<"C:\\DataTemp\\FileA.json"> 

let directory = "C:\\DataTemp\\" 
let files: string[] = 
    [| 
     "FileA.json" 
     "FileB.json" 
     "FileC.json" 
     "FileD.json" 
    |] 
[<EntryPoint>] 
let main argv = 

    let sampleA = TypeA.GetSamples() 
    let sampleB = TypeA.Load(directory+"FileB.json") 

    let allData = files |> Array.collect (fun f -> TypeA.Load(directory+f)) 
    for d in allData do 
     printfn "%A" d 
    //etc 

    0 

请注意,这些并不总是严格执行架构。例如,字符串类型值允许丢失,并且将被空字符串静静地替换;额外的数据被允许存在,并将被加载到JsonValue数据中,但通过静态类型的属性不可访问,等等。

相关问题