F# 如何动态使用FSharp.Data.JsonProvider?
我正在使用FSharp.Data.JsonProvider解析JSON文件。 从…起 我必须像这样声明类型F# 如何动态使用FSharp.Data.JsonProvider?,f#,f#-data,F#,F# Data,我正在使用FSharp.Data.JsonProvider解析JSON文件。 从…起 我必须像这样声明类型 type Simple = JsonProvider<"path/to/simple/json.json"> type Simple=JsonProvider 但是我想让JsonProvider更加灵活。 我所说的灵活的意思是像下面这样声明 let x = "path/to/simple/json.json" type Simple = JsonProvider<x&
type Simple = JsonProvider<"path/to/simple/json.json">
type Simple=JsonProvider
但是我想让JsonProvider更加灵活。
我所说的灵活的意思是像下面这样声明
let x = "path/to/simple/json.json"
type Simple = JsonProvider<x>
let x=“path/to/simple/json.json”
类型Simple=JsonProvider
因此,JsonProvider可以处理各种json文件,而不仅仅是特定的文件
我该怎么做?或者,还有其他方法吗?如果您的文件具有相同的形状(即相同的字段和字段类型),则可以使用其中一个作为类型参数,然后将其他方法传递给
Parse
:
open System.IO
type Simple = JsonProvider<"file1.json">
let value1 = Simple.GetSample()
let value2 = Simple.Parse(File.ReadAllText "file2.json")
opensystem.IO
类型Simple=JsonProvider
让value1=Simple.GetSample()
让value2=Simple.Parse(File.ReadAllText“file2.json”)
编辑:如果它们没有相同的形状怎么办?嗯,有两种情况 如果它们有细微的差别,比如一些字段可能存在或不存在,或者可能是字符串或数字,那么您可以制作一个样本文件,该文件是一个样本数组,并使用
JsonProvider
。生成的类型将使用可选值来适应差异
如果它们完全不同,那么JsonProvider根本就不是适合这项工作的工具。JsonProvider的目的是提供一个很好的API,当您提前知道JSON将具有什么形状时,可以读取JSON。如果您不这样做,那么您应该使用具有文档类型的通用JSON解析器,如System.Text.JSON的JsonDocument或Newtonsoft.JSON的JObject。我想如果你真的想继续使用JsonProvider,你也可以在幕后使用JsonProvider使用的文档类型(称为JsonValue)。如果他们不这样做怎么办?@JoshDruge编辑了这个案例的答案。