F# 急切地使用json类型提供程序加载所有分页数据
Cosider一个API,其回复始终为以下结构:F# 急切地使用json类型提供程序加载所有分页数据,f#,type-providers,F#,Type Providers,Cosider一个API,其回复始终为以下结构: { "pagination": { "limit": int, "offset": int, "count": int, "total": int }, "data": [ {...some obj...} ] }
{
"pagination": {
"limit": int,
"offset": int,
"count": int,
"total": int
},
"data": [
{...some obj...}
]
}
因此,有效载荷只在数据对象的结构上有所不同
理想情况下,我想告诉F#,所有从示例构建的类型都有一些公共部分分页信息,因此我可以有一个读取所有页面的通用方法
是否可能,或者我必须使用两个类型提供程序分别提取
分页
对象和数据
数组?我看到每个响应体有一个提供程序的好处,因为它支持从流中读取数据。我将定义两种不同的提供类型,一种用于解析分页数据,另一种用于解析实际数据,例如:
type Pagination = JsonProvider<"""{
"pagination": { "limit": 1, "offset": 2,
"count": 3, "total": 4 }
}""">
type OneDataType = JsonProvider<"""{
"data": [ {"a": 1} ]
}""">
type AnyData = JsonProvider<"""{
"pagination": { "limit": 1, "offset": 2,
"count": 3, "total": 4 },
"data": [],
"one_data_type": [ {"a":1} ],
"another_data_type": [ {"b":"xx" }]
}""">
let a = AnyData.Load("/some/file")
// Access pagination data
a.Pagination
// Access data as if it was OneDataType
let oneData = [| for d in a.Data ->
AnyData.OneDataType(d.JsonValue) |]
如果您想使用提供的单一类型执行此操作,那么您可以为多种不同类型的数据定义多个不同的字段,但必须以不同的方式命名这些字段。然后,您需要进行一些修改以正确读取数据。我不会这么做,因为我觉得很困惑,但它看起来是这样的:
type Pagination = JsonProvider<"""{
"pagination": { "limit": 1, "offset": 2,
"count": 3, "total": 4 }
}""">
type OneDataType = JsonProvider<"""{
"data": [ {"a": 1} ]
}""">
type AnyData = JsonProvider<"""{
"pagination": { "limit": 1, "offset": 2,
"count": 3, "total": 4 },
"data": [],
"one_data_type": [ {"a":1} ],
"another_data_type": [ {"b":"xx" }]
}""">
let a = AnyData.Load("/some/file")
// Access pagination data
a.Pagination
// Access data as if it was OneDataType
let oneData = [| for d in a.Data ->
AnyData.OneDataType(d.JsonValue) |]
键入AnyData=JsonProvider
设a=AnyData.Load(“/some/file”)
//访问分页数据
a、 分页
//像访问一个数据类型一样访问数据
设oneData=[|对于a中的d.Data->
AnyData.OneDataType(d.JsonValue)|]