Ballerina,使用来自 REST-API 的 Json 响应

问题描述

我的教授要我写一个关于如何部署 Ballerina 服务的小教程。所以我正在努力学习它。我使用的是 1.2 版,我对污点检查和变量类型的概念有点不知所措...

我正在尝试编写一个带有端点的最小 REST 服务,该端点从另一个 api 请求 json 数据,然后使用该 JSON 来做事。

目前有效的是:

service tutorial on new http:Listener(9090) {

    // Resource functions are invoked with the HTTP caller and the incoming request as arguments.
    resource function getName(http:Caller caller,http:Request req) {
   http:Client clientEP = new("https://api.scryfall.com/");

    var resp = clientEP->get("/cards/random");
    if (resp is http:Response) {

        var payload = resp.getJsonPayload();

        if (payload is json) {

            var result = caller->respond(<@untainted>(payload));
        } else {

            log:printError("");
        }
    } else {

        log:printError("");
    }
}

使用从 https://api.scryfall.com/cards/random 返回的 JSON 进行响应

但是现在可以说,我想从该 JSON 访问单个值。例如。 “名称”。 如果我尝试像这样访问它:payload["name"]

我得到:无效操作:类型“json”不支持索引

我刚刚发现,如果我先像这样创建地图,它会起作用:

map mp = payload;

如果我然后访问 mp["name"] 它工作。但为什么?如果您仍然需要创建地图然后投射有效负载,那么 json 类型有什么用?我将如何访问 json 中的 json?例如 mp["data"][0]... 无效操作:类型 'json' 不支持再次索引...

而且我仍在尝试理解污点检查的概念.... 在检查内容后,我是否只是将所有被污染的内容投射到 ? 有时我真的不明白文档试图告诉我什么......

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)