我对 IBM i (7.3) 上的 Web 服务和 Json 有点陌生,并且不完全确定如何使用 RPG 和 YAJL 分解以下 Json 文件(见下文)。
我试图分解的 Json IFS 文件不符合标头信息、数组信息等的“通常”格式(我在分解时没有问题。)。
换句话说(如果我错了,请纠正我),Json 对象被包装在这个文件的一个数组中。
因此,整个 Json 文件是一个数组,需要加载到一个包含一个或多个索引条目的数组中(在此 Web 服务响应中,dim = 1。)。
我将如何使用 YAJL 或 DB2-SQL 从 IFS 分解 RPG 中的这个 Json 文件以获取所有数据元素以进行处理?
• Web service file definition documentation: https://smartystreets.com/docs/cloud/us-street-api
• RPG source with data definition is provided below (Tried a few attempts without success.).
任何帮助和/或指导将不胜感激。
谢谢你。
[{
"input_index": 0,
"candidate_index": 0,
"delivery_line_1": "3747 Hecktown Rd",
"last_line": "Easton PA 18045-2350",
"delivery_point_barcode": "180452350471",
"components": {
"primary_number": "3747",
"street_name": "Hecktown",
"street_suffix": "Rd",
"city_name": "Easton",
"state_abbreviation": "PA",
"zipcode": "18045",
"plus4_code": "2350",
"delivery_point": "47",
"delivery_point_check_digit": "1"
},
"metadata": {
"record_type": "S",
"zip_type": "Standard",
"county_fips": "42095",
"county_name": "Northampton",
"carrier_route": "C042",
"congressional_district": "15",
"rdi": "Commercial",
"elot_sequence": "0038",
"elot_sort": "D",
"latitude": 40.69648,
"longitude": -75.28448,
"precision": "Zip9",
"time_zone": "Eastern",
"utc_offset": -5,
"dst": true
},
"analysis": {
"dpv_match_code": "Y",
"dpv_footnotes": "AABB",
"dpv_cmra": "N",
"dpv_vacant": "N",
"active": "Y"
}
}]
++++++++++
ctl-opt dftactgrp(*no) actgrp('QILE')
option(*nodebugio:*srcstmt:*nounref)
bnddir('YAJL') alwnull(*inputonly)
datfmt(*ISO) decedit('0.');
/include yajl/qrpglesrc,yajl_h
// Json IFS file to decompose.
dcl-c ifsFilename const('/Rick/smartstreets.json.txt');
dcl-ds jsonHeader qualified;
input_id varchar(36);
input_index int(10);
candidate_index int(10);
addressee varchar(50);
delivery_line_1 varchar(50);
delivery_line_2 varchar(50);
last_line varchar(50);
delivery_barcode varchar(12);
dcl-ds jsonComponents;
urbanization varchar(64);
primary_number varchar(30);
street_name varchar(64);
street_predirection varchar(16);
street_postdirection varchar(16);
street_suffix varchar(16);
secondary_nbr varchar(32);
secondary_des varchar(16);
extra_secondary_nbr varchar(32);
pmb_desinator varchar(16);
pmb_number varchar(16);
city_name varchar(64);
dft_city_name varchar(64);
state_abv char(2);
zipcode char(5);
plus4_code varchar(4);
delivery_point char(2);
delivery_point_chk char(1);
end-ds;
dcl-ds jsonMetadata;
record_type char(1);
zip_type varchar(32);
county_fips char(5);
county_name varchar(64);
carrier_route varchar(4);
congressional_district char(2);
building_dft_ind char(1);
rdi varchar(12);
elot_sequence varchar(4);
elot_sort varchar(4);
latitude packed(12:9);
longitude packed(12:9);
precision varchar(18);
time_zone varchar(48);
utc_offset packed(4:2);
dst char(5);
end-ds;
dcl-ds jsonAnalysis;
dpv_match_code varchar(1);
dpv_footnote varchar(32);
ddv_cmra varchar(1);
dpv_vacant varchar(1);
active varchar(1);
end-ds;
end-ds;
dcl-ds jsonResult qualified;
jsonArray0 likeds(jsonHeader) dim(10);
end-ds;
dcl-s docnode like(yajl_val);
dcl-s node like(yajl_val);
dcl-s list like(yajl_val);
dcl-s count int(10);
dcl-s errmsg varchar(500) inz('');
dcl-s dspfld char(52) inz('');
// Load Json in from the IFS file.
docnode = yajl_stmf_load_tree(ifsFilename:errmsg);
// Json loaded without issue,
if errmsg = '';
count = 0;
//Decompose IFS Json file.
yajl_tree_free(docnode);
else;
// Unable to load JSON data from the IFS.
endif;
*inlr = *on;
return;