gpt4 book ai didi

json - 通过 JSONProvider 重用类型定义?

转载 作者:行者123 更新时间:2023-12-02 22:16:12 26 4
gpt4 key购买 nike

我正在使用 FSharp-Data 中的 JSONProvider 自动为我使用服务的示例响应所使用的 Web 服务创建类型。

但是,当涉及到在服务中重用的类型时,我有点困惑,例如,有一个 api 方法返回 X 类型的单个项目,而另一个返回 X 的列表,依此类推。我真的必须为此生成多个定义吗?这是否意味着我将拥有同一事物的重复类型?

所以,我想我真正想问的是,有没有办法从 JSON 样本生成的类型创建复合类型?

最佳答案

如果您使用单独的示例单独调用 JsonProvider,那么您将获得示例中相同内容的重复类型。遗憾的是,F# 数据库对此无能为力。

您可以选择的一个选项是同时将多个示例传递给 JsonProvider(使用 SampleIsList 参数)。在这种情况下,它会尝试为您提供的所有示例查找一种类型 - 但它也会在所有示例中共享具有相同结构的类型。

我假设您不想为所有样本获取一种类型 - 在这种情况下,您可以使用附加的 JSON 对象来包装各个样本,如下所示(这里,真正的样本是嵌套在“one”和“两个”):

type J = JsonProvider<"""
[ { "one": { "person": {"name": "Tomas"} } },
{ "two": { "num": 42, "other": {"name": "Tomas"} } } ]""", SampleIsList=true>

现在,您可以运行 Parse 方法,并使用“one”或“two”将示例包装在新的 JSON 对象中,具体取决于您正在处理的示例:

let j1 = """{ "person": {"name": "Tomas"} }"""
let o1 = J.Parse("""{"one":""" + j1 + "}").One.Value

let j2 = """{ "num": 42, "other": {"name": "Tomas"} }"""
let o2 = J.Parse("""{"two":""" + j2 + "}").Two.Value

“一”和“二”记录完全是任意的(我只是将它们添加为具有两个单独的名称)。我们在解析 JSON 之前对其进行包装,然后使用 OneTwo 属性访问它。但是,这意味着 o1.Persono2.Other 现在属于同一类型:

o1.Person = o2.Other

这会返回 false,因为我们没有对 F# Data 中的 JSON 值实现相等,但它会进行类型检查 - 因此类型是相同的。

这相当复杂,因此我可能会寻找其他方法来完成您需要的操作 - 但这是在多个 JSON 示例之间获取共享类型的一种方法。

关于json - 通过 JSONProvider 重用类型定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30434125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com