在芭蕾舞女演员中使用查询表达式连接两个json对象

问题描述

我在使用Ballerina的集成查询语言连接两个json对象时遇到问题。我有两个子服务,它们在调用时响应json对象。我的目标是基于公共密钥加入它们,并返回另一个json作为结果。

我尝试过此代码,但没有成功:

function getAllTransactionsPerDcr(string requestedContentType) returns json|xml|error {
   var dcrRequest = dcrService -> get("/dataControlRecords");
   var traRequest = traService -> get("/transactions");

   if (dcrRequest is http:Response && traRequest is http:Response){
       json|error dcrs = dcrRequest.getJsonPayload();
       json|error tras = traRequest.getJsonPayload();

       if(dcrs is json && tras is json ){
           if(requestedContentType == "application/json"){
              json output = from var dcr in <json[]>dcrs
                            join var tra in <json[]>tras
                            on <string>dcr.CDCRID equals <string>tra.CDCRID
                            select {
                                id: check dcr.CDCRID,source: check dcr.VCSOURCES,target: check dcr.VCTARGETS,transactionId: check tra.CTRAID
                            };
              return output;
          }
      }
  }
}

这是资源功能

@http:ResourceConfig {
    methods: ["GET"],path:"/data-control-records"
}
resource function getAllTransactionsPerDcr(http:Caller caller,http:Request request) returns error?{
    http:Response response = new;
    var result = getAllTransactionsPerDcr(request.getHeader("Accept"));
    if(result is json){
      check caller -> respond(result);  
    } else if (result is error){
        response.setTextPayload(result.message());
    }
}

如果我致电服务,会收到以下错误消息:

error: {ballerina}StackOverflow
    at ballerina.lang_query.0_0_1._InitFunction:process(types.bal:137)
       ballerina.lang_query.0_0_1._InputFunction:process(types.bal:197)
       ballerina.lang_query.0_0_1._StreamPipeline:next(types.bal:74)
       ballerina.lang_query.0_0_1._InnerJoinFunction:process(types.bal:355)
       ballerina.lang_query.0_0_1._InnerJoinFunction:process(types.bal:361)
       ........

查询在不使用join子句的情况下起作用,因此该连接存在问题。

可能是什么问题?是加入json的正确方法还是有更好的方法呢?

编辑:重现该错误的示例数据:

dcrs:

[
  {
    "CDCRID": "D1234567","VCSOURCES": "EXAMPLE SOURCE","VCDATATYPS": "example","VCDATATYPL": "example","VCTARGETS": "EXAMPLE TARGET","VCDESCL": "Lorem ipsum dolor sit amet"       
  },{
    "CDCRID": "D3456789","VCSOURCES": "EXAMPLE SOURCE 2","VCDATATYPS": "example2","VCDATATYPL": "example2","VCTARGETS": "EXAMPLE TARGET2","VCDESCL": "Lorem ipsum dolor sit amet2"       
  }
]

tras:

[
  {
    "CTRAID": "T123456","DTIMEOUT": "2020-06-29T08:40:07.000+02:00","DTIMEIN": "2020-06-29T08:40:05.000+02:00","CDCRID": "D1234567"
  },{
    "CTRAID": "T345678","CDCRID": "D3456789"
  }
]

解决方法

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

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

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