解码 ReasonML 中的 Json/Reading 个错误
Decoding Json/Reading Errors in ReasonML
我收到了一个从 aws 的 appsync 服务返回的 graphql 查询。
这是从查询返回的 json。
{
"data": {
"listPeople": {
"items": [
{
"age": 23,
"id": "123",
"name": "BobTest",
"__typename": "Person"
},
{
"age": 24,
"id": "124",
"name": "JoeTest",
"__typename": "Person"
},
{
"age": 25,
"id": "125",
"name": "JimTest",
"__typename": "Person"
}
],
"__typename": "PersonConnection"
}
}
}
这是登录到控制台的样子。
这是 apollo-dev-tools 中的查询响应:
访问 items
数组时出错。
正在尝试将 items
值记录到 运行 控制台
https://github.com/idkjs/reason-apollo-question/blob/d38e7fbc33f02ab718c7227958d88f02adba1696/src/Persons.re#L66-L70
| Data(response) =>
Js.log(response##listPeople);
let listPeople = response##listPeople;
let items = response##listPeople##items;
Js.log(items);
产生此错误:
We've found a bug for you!
/Users/prisc_000/code/REASON/APOLLO/reason-apollo-question/src/Persons.re 69:32-51
67 ┆ Js.log(response##listPeople);
68 ┆ let listPeople = response##listPeople;
69 ┆ let items = response##listPeople##items;
70 ┆ Js.log(items);
71 ┆
This has type:
option({. "items": option(Js.Array.t(option(
{. "age": int, "id": string, "name": string})))
})
But somewhere wanted:
Js.t('a)
ninja: build stopped: subcommand failed.
>>>> Finish compiling(exit: 1)
如何解决此类型错误?
谢谢!
解决方案:
基本上,我还没有摸索到 Some/None 个变量。
当你看到编译器告诉你它正在寻找上面错误中指出的选项时,你已经通过将值包装在 Some
.
中获得了值(如果存在)
所以这个:
let name = item##name;
let id = item##id;
let age = item##age;
必须更改为:
let name = Some(item##name);
let id = Some(item##id);
let age = Some(item##age);
就是这样。
您似乎将 response##listPeople
定义为一个选项,因此您不能直接对其调用 response##listPeople##items
。在从中读取 items
之前,您应该对 response##listPeople
进行模式匹配。
我收到了一个从 aws 的 appsync 服务返回的 graphql 查询。 这是从查询返回的 json。
{
"data": {
"listPeople": {
"items": [
{
"age": 23,
"id": "123",
"name": "BobTest",
"__typename": "Person"
},
{
"age": 24,
"id": "124",
"name": "JoeTest",
"__typename": "Person"
},
{
"age": 25,
"id": "125",
"name": "JimTest",
"__typename": "Person"
}
],
"__typename": "PersonConnection"
}
}
}
这是登录到控制台的样子。
这是 apollo-dev-tools 中的查询响应:
访问 items
数组时出错。
正在尝试将 items
值记录到 运行 控制台
https://github.com/idkjs/reason-apollo-question/blob/d38e7fbc33f02ab718c7227958d88f02adba1696/src/Persons.re#L66-L70
| Data(response) =>
Js.log(response##listPeople);
let listPeople = response##listPeople;
let items = response##listPeople##items;
Js.log(items);
产生此错误:
We've found a bug for you!
/Users/prisc_000/code/REASON/APOLLO/reason-apollo-question/src/Persons.re 69:32-51
67 ┆ Js.log(response##listPeople);
68 ┆ let listPeople = response##listPeople;
69 ┆ let items = response##listPeople##items;
70 ┆ Js.log(items);
71 ┆
This has type:
option({. "items": option(Js.Array.t(option(
{. "age": int, "id": string, "name": string})))
})
But somewhere wanted:
Js.t('a)
ninja: build stopped: subcommand failed.
>>>> Finish compiling(exit: 1)
如何解决此类型错误?
谢谢!
解决方案:
基本上,我还没有摸索到 Some/None 个变量。
当你看到编译器告诉你它正在寻找上面错误中指出的选项时,你已经通过将值包装在 Some
.
所以这个:
let name = item##name;
let id = item##id;
let age = item##age;
必须更改为:
let name = Some(item##name);
let id = Some(item##id);
let age = Some(item##age);
就是这样。
您似乎将 response##listPeople
定义为一个选项,因此您不能直接对其调用 response##listPeople##items
。在从中读取 items
之前,您应该对 response##listPeople
进行模式匹配。