如何解决在芭蕾舞女演员中使用查询表达式连接两个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 举报,一经查实,本站将立刻删除。