如何解决在ocaml中解析json
我有一个 json 文件,我试图将其解析为 ocaml/reasonml。我试图做的是将 json 文件解析为 OCaml 数据类型,以便它可以在 OCaml 编写的程序中使用。
[
{
"context": "str.substr,str.substr","rule": [
"C_1"
],"prob": [
1.0
]
},{
"context": "Var,C_1","rule": [
"C_0"
],{
"context": "0,"rule": [
"2"
],{
"context": "str.++,str.replace","rule": [
"C_2"
],{
"context": "str.replace,_","rule": [
"str.replace","Var"
],"prob": [
0.8571428571428571,0.14285714285714285
]
},
但我收到“某些记录字段未定义”错误 代码是
是我的代码有问题还是json文件有问题?
type json = {
context : string;
rule : string;
prob : int;
}
let context_json c =
{
context = c |> member "context" |> to_string;
}
let rule_json r =
{
rule = r |> member "rule" |> to_string;
}
let parse_context c =
try context_json c
with Type_error (s,_) -> failwith ("Parsing error: " ^ s)
let load () =
let e = Yojson.Basic.from_file "sorted.json" in
e |> member "context" |> to_list |> List.map context_json
解决方法
考虑这个函数:
let context_json c =
{
context = c |> member "context" |> to_string;
}
我在您的代码中的任何地方都没有看到 member
的定义。然而,如果我们假设表达式 c |> member "context" |> to_string
是有效的,那么这个函数的结果是一个只有一个名为 context
的字段的记录。但是您的记录类型有三个字段。您需要为记录的所有字段定义值。这就是编译器告诉你的。
如果其他字段始终相同,您可以大致如下定义函数:
let context_json c =
{ rule = "";
context = c |> member "context" |> to_string;
prob = 0;
}
请注意,您已使用不可变字段定义了记录类型。因此,您以后将无法更改这些值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。