Hello,大家好,这里是小知课堂,之前的课程中我们已经了解了如何将一个EDI报文解析为Json格式的文件,今天我们来看看如何处理接收到的JSON文件。根据接收JSON文件方式的不同,处理JSON文件的方式也有差异。通常情况下,我们会利用知行EDI系统自带的API端口将收到的JSON文件写入数据库中,然后处理收到的这些数据,这种方式需要主动将JSON文件POST到我们的API服务器上,由API端口写入数据库中,接下来则按照数据库方案生成EDI报文即可。同时我们要为获取到的JSON文件返回的Response JSON文件,或者从API服务器上直接GET到JSON文件,这时通过Http请求的方式获取到的JSON文件就无法直接写入数据库,那这些情况下如何处理JSON文件呢?小知给你答案~
1. 获取JSON文件
要处理获取到的JSON文件,首先需要知道我们是如何使用Http 请求获取JSON文件,下面小知就来说明如何使用Http请求来获取JSON文件。
1.1 获取POST请求的Response JSON文件
在《EDI与JSON解决方案——EDI报文JSON格式的解析和传输》中,我们讲解了如何使用POST方法将JSON文件发送的API服务器中。发送成功后API服务器可能会回复一个Rsesponse JSON文件,知行EDI系统提供的httpPost方法可以将该文件保存的http:content参数中,如下所示:
1 2 3 4 5 |
<rsb:call op="httpPost" in="http" out="out"> <rsb:set attr="output.data" value="[out.http:content]"/> </rsb:call> <rsb:set attr="output.FileName"value="Response.json" /> <rsb:push item="output" /> |
我们将获取到的JSON数据放到output.data中,之后将以文件的形式push出去,就可以获取到对应的JSON文件。
1.2 GET请求获取JSON文件
除了获取到返回的Response JSON文件外,有时我们需要使用GET请求直接从API服务器上获取JSON文件,使用GET方法获取JSON文件的方法和使用POST方法获取JSON文件的方法类似,需要使用知行EDI系统提供的httpGet方法获取JSON文件,使用该方法获取JSON文件的示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 |
<rsb:set attr="http. firewall_server" value="192.168.0.184"/> <rsb:set attr="http. proxy_server" value="192.168.0.123 "/> <rsb:set attr="http. user" value="Test"/> <rsb:set attr="http.password " value="4z7D0m9d7Q7i8z3W3o6w "/> <rsb:set attr="http. httpversion" value="1.1"/> <rsb:set attr="http.url" value="http://localhost:8001/api.rsc/orders "/> <rsb:call op="httpGet" in="http" out="out"> <rsb:set attr="output.data" value="[out.http:content]"/> </rsb:call> <rsb:set attr="output.FileName"value="GET.json" /> <rsb:push item="output" /> |
和httpPost方法类似,都需要先将要求的值放到其对应的参数中,其中url参数为必须的,其余的均为可选参数。这里只列举了几个参数,httpGet方法支持的参数可以参考知行EDI系统的Help界面,如下图所示,这里我们可以详细了解到httpGet方法支持的参数。
配置了这些参数后,调用httpGet方法,将获取到的JSON文件保存到其content参数中,最后再push出去就可以得到我们需要的JSON文件了。
2. 处理JSON文件
在获取了对应的JSON文件后,我们需要根据需要获取JSON文件中有用的信息,一般情况下我们会利用JSON端口将获取到的JSON文件转换为XML文件后,在XML Map端口与其他结构的XML文件进行映射,映射完成后,就可以将该JSON文件的有效信息提取出来了。但是在此小知要介绍一种不利用JSON端口,直接获取JSON文件中有效信息的方法,在此,我们就需要借助知行EDI系统为我们提供的rsb代码了。这里我们使用的是jsonDOMSearch方法:
1 2 3 4 5 |
<rsb:set attr="json.uri" value="[FilePath]" /> <rsb:set attr="json.jsonpath" value="/json/order_header " /> <rsb:call op="jsonDOMSearch" in="json"> <rsb:set attr="jsonData.order_number " value="[jsonpath('order_number') | def]" /> </rsb:call> |
和其他的方法类似,在使用该方法时需要先设置此方法的必要参数,uri和jsonPath,uri指代需要读取的JSON文件的路径,写为[FilePath]表示在当前端口的send路径下获取当前的文件,jsonPath则是需要获取的JSON文件内部的取值路径,例如需要处理的JSON文件如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "order_header": { "id": "1", "buyer_number": "1234567890123", "buyer_company": "A company", "buyer_telephone": "112233441", "create_datetime": "20200202", "currency": "USD", "delivery_datetime": "20200202", "rff_1": "The EDI apartment", "invoice_recipent_number": "4567890123456", "order_number": "123456789", "status":"0", "supplier_number": "1234567890102", "supplier_telephone": "+123456789", "plant": "BeiJing", "order_items": [ { "id": "1", "buyer_item_number": "5463728190345", "item_description": "Item01, M, red", "unit_price":"PCE", "po_number": "123456789", "price_unit": "2.2", "status": "0" } ] } |
此时我们设置的jsonPath为/json/order_header,则需要取order_header下order_number属性的值时,我们只需要写为:
3. 总结
到这里,小知就已经讲解完了如何处理我们收到的JSON文件了,很多同学看完之后是不是还有些云里雾里呢,如果不太清楚我们rsb语言的话,建议参考一下这篇文章《RSB语言实战》。
从技术角度来看,实现EDI报文的JSON格式转换,在我们的知行EDI系统中还是比较容易的,所以如果大家有这方面的需求或者大家在使用我们知行EDI系统中有任何疑惑的地方都可以通过邮件和我们联系。好了,我们这节课就到这里,下篇再见。
注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。