f# - FSharp.Data JsonProvider 的重命名类型
问题描述
我有一个看起来像这样的 JSON:
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
"descriptions": [
{
"value": "Sample description",
"language" "en"
}
],
...
}
JsonProvider
从库中使用时FSharp.Data
,它将两个字段映射为相同的类型MyJsonProvider.Name
。使用代码时,这有点令人困惑。有什么办法可以将类型重命名为MyJsonProvider.NameOrDescription
?我已经读到这对于CsvProvider是可能的,但是输入
JsonProvider<"./Resources/sample.json", Schema="Name->NameOrDescription">
导致错误。
此外,是否可以定义该Description
字段实际上是一个Option<MyJsonProvider.NameOrDescription>
?还是我只需要定义 JSON 两次,一次使用所有可能的值,第二次使用强制值?
[
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
"descriptions": [
{
"value": "Sample description",
"language" "en"
}
],
...
},
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
...
}
]
解决方案
要回答您的第一个问题,我认为没有办法指定这种重命名。这将是一个非常合理的选择,但 JSON 提供程序在此处生成名称时也可能更聪明(它知道类型可以表示Name
or ,因此它可以基于这些Description
生成名称)。Or
作为 hack,您可以添加一个未使用的具有正确名称的字段:
type A = JsonProvider<"""{
"do not use": { "value_with_langauge": {"value":"A", "language":"A"} },
"names": [ {"value":"A", "language":"A"} ],
"descriptions": [ {"value":"A", "language":"A"} ]
}""">
要回答您的第二个问题-您的names
和descriptions
字段已经是数组,即ValueWithLanguge[]
. 为此,您不需要可选值。如果它们不存在,提供者只会给你一个空数组。
推荐阅读
- javascript - 如何在Angular中清除组合框选定的值
- python - Pygame:添加主菜单功能时无法移动播放器
- perl - 使用已发布的 Moo API 在 Moo 中动态修改方法
- json - 在 Groovy 中循环文件以创建 JSON 模板
- python - 如何从列表中获取某个值,分析之前在 python 中的值?
- vuetify.js - Vuetify 迷你图引发错误。如何解决?
- php - MySQL 数据库项目不会更新。PHP 不会进入 if($_POST['edit_submit'])
- javascript - 每个 DOM 元素的清晰样式
- excel - 如果文件名符合某些条件
- ruby-on-rails - 如何获得总成本和税收百分比