DATA-INTO returning 1002: parse error: trailing garbage█
Posted: Fri Feb 24, 2023 10:32 pm
Hello, I am trying to parse a JSON message and I am getting this training garbage error back.
1002: parse error: trailing garbage█
I am including the calling program code as well as the processing procedure that handles the request.
This test harness calls the program that actually does the parsing, etc.
Thanks in advance for any ideas or suggestions.
This is the program that is failing to parse.
1002: parse error: trailing garbage█
I am including the calling program code as well as the processing procedure that handles the request.
This test harness calls the program that actually does the parsing, etc.
Thanks in advance for any ideas or suggestions.
Code: Select all
H OPTION(*NoDebugIO: *SrcStmt)
*------------------------------------------------------------------------*
* Templates *
*------------------------------------------------------------------------*
* XML CLOB
D JSONCLOB_t DS QUALIFIED
D TEMPLATE
D Length 10U 0 INZ(0)
D Data 1500000A INZ(*BLANKS)
*------------------------------------------------------------------------*
* Global Variables *
*------------------------------------------------------------------------*
D JSONCLOB S SQLTYPE(CLOB:200000)
D mCount S 12S 0 inz(0)
For mCount = 1 to 2;
If %rem(mCount:2) = 0 ;
clear JSONCLOB_Data;
JSONCLOB_Data = '{"Rqst":{' +
'"AccountOwnershipMatch": {' +
'"OverallMatchScore": "vijgoso",' +
'"ConditionCode": "kobur",' +
'"FullNameMatch": "Peruxxi",' +
'"FirstNameMatch": "Lillie",' +
'"MiddleNameMatch": "Arthur Sntos",' +
'"BusinessNameMatch": "787-87-3355",' +
'"DateOfBirthMatch": "4/5/1990",' +
'"SSNMatch": "302-20-1281",' +
'"FullAddressMatch": "517 Vim Trail",' +
'"AddressLine1Match": "902 Cugje Loop",' +
'"AddressLine2Match": "748 Gaso Key",' +
'"CityMatch": "Zagkamog",' +
'"StateMatch": "VT",' +
'"ZipMatch": "65476",' +
'"HomePhoneMatch": "(650) 753-3551",' +
'"WorkPhoneMatch": "(977) 955-2435",' +
'"IDTypeMatch": "5673339817295872",' +
'"IDNoMatch": "6930803466436608",' +
'"IDStateMatch": "FL",' +
'"SignerOwnerMatch": "avar",' +
'"NamePrefixMatch": "Miss",' +
'"NameSuffixMatch": "Olga Harpoo"' +
'},' +
'"AccountStatus": {' +
'"PrimaryStatusCode": "ravad",' +
'"SecondaryStatusCode": "luwsegoh",' +
'"AdditionalStatusCode": "himmo",' +
'"PrimaryMessage": "51",' +
'"SecondaryMessage": "28",' +
'"AdditionalMessage": "44",' +
'"NumberOfReturns": "3537288640331776",' +
'"LastReturnDate": "Bolognesi",' +
'"LastReturnReason": "Bergmann",' +
'"StopAmount": "warpat",' +
'"StopBeginningNumber": "5438836765097984",' +
'"StopEndNumber": "6656568909103104",' +
'"StopExpirationDate": "12/20/2051",' +
'"LastUpdated": "Bakker",' +
'"AdditionalClosedDate": "6/10/2027",' +
'"PreviousStatus": "dujta",' +
'"FCRADisputeIndicator": "dedriujo",' +
'"FCRADisputeAdditionalInformation": "awku",' +
'"ScoredAccountsReason1": "3528648829",' +
'"ScoredAccountsReason2": "426535590",' +
'"ScoredAccountsReason3": "201429791",' +
'"ScoredAccountsReason4": "601142779",' +
'"ScoredAccountsReason5": "368261339",' +
'"RealTimeHighFocusResponseCode": "23:45",' +
'"RealTimeDuplicateItemResponseCode": "16:00",' +
'"ParticipantAccountScoreResponseCode": "60118891",' +
'"DisputeResponseCode": "okua",' +
'"AdditionalInformation": {' +
'"Code": "897",' +
'"Message": "Unscor No Info"' +
'}' +
'},' +
'"AccountDetails":' +
'{' +
'"RoutingTransitNumber": "122199983",' +
'"AccountNumber": "89855",' +
'"CheckSerialNumber": "88885",' +
'"Amount": "85556",' +
'"CreditAccountRoutingNumber": "88884",' +
'"CreditAccountRoutingNumber": "88883",' +
'"FeeAttribute": "NW"' +
'},' +
'"Status": {' +
'"StatusCode": "kifeco",' +
'"StatusMessage": "55",' +
'"MoreInformation": "ketwokp",' +
'"TransactionId": "1408474393083904"' +
'}' +
'}}';
Else;
clear JSONCLOB_Data;
JSONCLOB_Data = '{"Rqst":{' +
'"AccountStatus":{' +
'"PrimaryStatusCode": "099",' +
'"SecondaryStatusCode": "000",' +
'"AdditionalStatusCode": "897",' +
'"PrimaryMessage": "Open Valid",' +
'"AdditionalMessage": "Unscor No Info",' +
'"LastUpdated": "20090313",' +
'"AdditionalClosedDate": "20090313",' +
'"PreviousStatus": "000",' +
'"FCRADisputeAdditionalInformation": " ",' +
'"RealTimeHighFocusResponseCode": "0",' +
'"RealTimeDuplicateItemResponseCode": "0",' +
'"ParticipantAccountScoreResponseCode": "0",' +
'"DisputeResponseCode": "X",' +
'"AdditionalInformation": {' +
'"Code": "897",' +
'"Message": "Unscor No Info"' +
'}' +
'},' +
'"AccountDetails": {' +
'"RoutingTransitNumber": "122199983",' +
'"AccountNumber": "89455",' +
'"CheckSerialNumber": "203618",' +
'"Amount": "2440090",' +
'"CreditAccountRoutingNumber": "082900872",' +
'"CreditAccountNumber": "12312313",' +
'"FeeAttribute": "NA"' +
'},' +
'"Status": {' +
'"StatusCode": "200",' +
'"StatusMessage": "Success",' +
'"MoreInformation": "Success response received from EWS",' +
'"TransactionID": "ef4fbe68-8def-11ed-b9d2-644d425a0000-1"' +
'}' +
'}}';
ENDIF;
JSONCLOB_Len = %LEN(%TRIM(JSONCLOB_Data));
EXEC SQL CALL PGMM114LIB.Fraud_Insert_Check_Score_Details (:JSONCLOB);
ENDFOR;
Return;
Code: Select all
ctl-opt option(*nodebugio:*srcstmt:*nounref) dftactgrp(*no)
actgrp(*new) bnddir('ABOBIN_DIR':'YAJL2');
DCL-F FRDLOG KEYED USAGE(*OUTPUT) ;
DCL-DS FRDLOGOut LIKEREC( RFRDLOG : *OUTPUT ) INZ;
/include QRPGLESRC,yajl_h
// File Data Structures
dcl-ds Rqst Qualified Inz;
dcl-ds AccountOwnershipMatch ;
OverallMatchScore varchar(20);
ConditionCode varchar(20);
FullNameMatch varchar(30);
FirstNameMatch varchar(30);
MiddleNameMatch varchar(30);
BusinessNameMatch varchar(30);
DateOfBirthMatch varchar(30);
SSNMatch varchar(30);
FullAddressMatch varchar(30);
AddressLine1Match varchar(30);
AddressLine2Match varchar(30);
CityMatch varchar(30);
StateMatch varchar(30);
ZipMatch varchar(30);
HomePhoneMatch varchar(30);
WorkPhoneMatch varchar(30);
IDTypeMatch varchar(30);
IDNoMatch varchar(30);
IDStateMatch varchar(30);
SignerOwnerMatch varchar(30);
NamePrefixMatch varchar(30);
NameSuffixMatch varchar(30);
end-ds AccountOwnershipMatch;
dcl-ds AccountStatus ;
PrimaryStatusCode varchar(20);
SecondaryStatusCode varchar(20);
AdditionalStatusCode varchar(20);
PrimaryMessage varchar(20);
SecondaryMessage varchar(20);
AdditionalMessage varchar(20);
NumberOfReturns varchar(20);
LastReturnDate varchar(20);
LastReturnReason varchar(20);
StopAmount varchar(20);
StopBeginningNumber varchar(20);
StopEndNumber varchar(20);
StopExpirationDate varchar(20);
LastUpdated varchar(20);
AdditionalClosedDate varchar(20);
PreviousStatus varchar(20);
FCRADisputeIndicator varchar(20);
FCRADisputeAdditionalInformation varchar(20);
ScoredAccountsReason1 varchar(20);
ScoredAccountsReason2 varchar(20);
ScoredAccountsReason3 varchar(20);
ScoredAccountsReason4 varchar(20);
ScoredAccountsReason5 varchar(20);
RealTimeHighFocusResponseCode varchar(20);
RealTimeDuplicateItemResponseCode varchar(20);
ParticipantAccountScoreResponseCode varchar(20);
DisputeResponseCode varchar(20);
dcl-ds AdditionalInformation ;
Code varchar(50);
Message varchar(50);
end-ds AdditionalInformation ;
end-ds AccountStatus;
dcl-ds AccountDetails ;
RoutingTransitNumber varchar(20);
AccountNumber varchar(20);
CheckSerialNumber varchar(20);
Amount varchar(20);
CreditAccountRoutingNumber varchar(20);
CreditAccountNumber varchar(20);
FeeAttribute varchar(20);
end-ds AccountDetails ;
dcl-ds Status ;
StatusCode varchar(20);
StatusMessage varchar(20);
MoreInformation varchar(50);
TransactionId varchar(50);
end-ds Status ;
end-ds Rqst;
dcl-ds JSONCLOB_t qualified template;
Length UNS(10) inz(0);
Data char(1500000) inz(*blanks);
end-ds;
dcl-ds *n PSDS;
itemCount Uns(20) Pos(372); // Populated by DATA-INTO
end-ds;
// Prototypes and Interface Defintions
DCL-PR Entry extpgm('FRDR0001');
JSONCLOB LIKEDS(JSONCLOB_t);
END-PR;
DCL-PI Entry;
JSONCLOB LIKEDS(JSONCLOB_t);
END-PI;
// Program variables
dcl-s errNoLC char(6);
dcl-s errMsgLC char(100);
dcl-s JSONOptions char(100);
dcl-s JSONIn varchar(16773100);
dcl-s JSONOut varchar(16773100);
// Constants
dcl-c QUOTE Const(x'7D');
dcl-c UpC Const(' ABCDEFGHIJKLMNOPQRSTUVWXYZ');
dcl-c LowC Const('~abcdefghijklmnopqrstuvwxyz');
dcl-c LF Const(x'25');
// Main Line
//Clear Rqst;
Clear JSONIn;
Clear JSONOut;
Clear FRDLOGOut;
FRDLOGOut.JSNTIMEA = %TimeStamp();
FRDLOGOut.Module = 'FRDR0001';
FRDLOGOut.JSNLOGIN = %trim(JSONCLOB.Data);
JSONIn = %trim(JSONCLOB.Data) ;
JSONOptions = ' doc=string countprefix=num_ trim=all ' +
' case=any allowmissing=yes allowextra=yes ';
Monitor;
// HERE is where it fails to parse......
[b] DATA-INTO Rqst
%Data( JSONIn : JSONOptions )
%PARSER('YAJL/YAJLINTO');[/b]
On-Error;
errNoLC = '400';
errMsgLC = 'Bad Request';
JSONOut = GenErr(errNoLC:errMsgLC);
Clear JSONCLOB;
JSONCLOB.Data = %Trim(JSONOut);
JSONCLOB.Length = %Len(%Trim(JSONCLOB.Data));
GenLog();
Return;
EndMon;
FRDLOGOut.JSNTIMEB = %TimeStamp();
Monitor;
EXEC SQL
INSERT INTO FRDP0001
(
OverallMatchScore,
ConditionCode,
FullNameMatch,
FirstNameMatch,
MiddleNameMatch,
BusinessNameMatch,
DateOfBirthMatch,
SSNMatch,
FullAddressMatch,
AddressLine1Match,
AddressLine2Match,
CityMatch,
StateMatch,
ZipMatch,
HomePhoneMatch,
WorkPhoneMatch,
IDTypeMatch,
IDNoMatch,
IDStateMatch,
SignerOwnerMatch,
NamePrefixMatch,
NameSuffixMatch,
PrimaryStatusCode,
SecondaryStatusCode,
AdditionalStatusCode,
PrimaryMessage,
SecondaryMessage,
AdditionalMessage,
NumberOfReturns,
LastReturnDate,
LastReturnReason,
StopAmount,
StopBeginningNumber,
StopEndNumber,
StopExpirationDate,
LastUpdated,
AdditionalClosedDate,
PreviousStatus,
FCRADisputeIndicator,
FCRADisputeAdditionalInformation,
ScoredAccountsReason1,
ScoredAccountsReason2,
ScoredAccountsReason3,
ScoredAccountsReason4,
ScoredAccountsReason5,
RealTimeHighFocusResponseCode,
RealTimeDuplicateItemResponseCode,
ParticipantAccountScoreResponseCode,
DisputeResponseCode,
AdditionalInformationCode,
AdditionalInformationMessage,
StatusCode,
StatusMessage,
MoreInformation,
TransactionId,
RoutingTransitNumber,
AccountNumber,
CheckSerialNumber,
Amount,
CreditAccountRoutingNumber,
CreditAccountNumber,
FeeAttribute
)
VALUES (
:AccountOwnershipMatch.OverallMatchScore,
:AccountOwnershipMatch.ConditionCode,
:AccountOwnershipMatch.FullNameMatch,
:AccountOwnershipMatch.FirstNameMatch,
:AccountOwnershipMatch.MiddleNameMatch,
:AccountOwnershipMatch.BusinessNameMatch,
:AccountOwnershipMatch.DateOfBirthMatch,
:AccountOwnershipMatch.SSNMatch,
:AccountOwnershipMatch.FullAddressMatch,
:AccountOwnershipMatch.AddressLine1Match,
:AccountOwnershipMatch.AddressLine2Match,
:AccountOwnershipMatch.CityMatch,
:AccountOwnershipMatch.StateMatch,
:AccountOwnershipMatch.ZipMatch,
:AccountOwnershipMatch.HomePhoneMatch,
:AccountOwnershipMatch.WorkPhoneMatch,
:AccountOwnershipMatch.IDTypeMatch,
:AccountOwnershipMatch.IDNoMatch,
:AccountOwnershipMatch.IDStateMatch,
:AccountOwnershipMatch.SignerOwnerMatch,
:AccountOwnershipMatch.NamePrefixMatch,
:AccountOwnershipMatch.NameSuffixMatch,
:AccountStatus.PrimaryStatusCode,
:AccountStatus.SecondaryStatusCode,
:AccountStatus.AdditionalStatusCode,
:AccountStatus.PrimaryMessage,
:AccountStatus.SecondaryMessage,
:AccountStatus.AdditionalMessage,
:AccountStatus.NumberOfReturns,
:AccountStatus.LastReturnDate,
:AccountStatus.LastReturnReason,
:AccountStatus.StopAmount,
:AccountStatus.StopBeginningNumber,
:AccountStatus.StopEndNumber,
:AccountStatus.StopExpirationDate,
:AccountStatus.LastUpdated,
:AccountStatus.AdditionalClosedDate,
:AccountStatus.PreviousStatus,
:AccountStatus.FCRADisputeIndicator,
:AccountStatus.FCRADisputeAdditionalInformation,
:AccountStatus.ScoredAccountsReason1,
:AccountStatus.ScoredAccountsReason2,
:AccountStatus.ScoredAccountsReason3,
:AccountStatus.ScoredAccountsReason4,
:AccountStatus.ScoredAccountsReason5,
:AccountStatus.RealTimeHighFocusResponseCode,
:AccountStatus.RealTimeDuplicateItemResponseCode,
:AccountStatus.ParticipantAccountScoreResponseCode,
:AccountStatus.DisputeResponseCode,
:AdditionalInformation.Code,
:AdditionalInformation.Message,
:Status.StatusCode,
:Status.StatusMessage,
:Status.MoreInformation,
:Status.TransactionId,
:AccountDetails.RoutingTransitNumber,
:AccountDetails.AccountNumber,
:AccountDetails.CheckSerialNumber,
:AccountDetails.Amount,
:AccountDetails.CreditAccountRoutingNumber,
:AccountDetails.CreditAccountNumber,
:AccountDetails.FeeAttribute
);
On-Error;
errNoLC = '500';
errMsgLC = 'Internal Server Error';
JSONOut = GenErr(errNoLC:errMsgLC);
Clear JSONCLOB;
JSONCLOB.Data = %Trim(JSONOut);
JSONCLOB.Length = %Len(%Trim(JSONCLOB.Data));
GenLog();
Return;
EndMon;
errNoLC = '200';
errMsgLC = 'Success';
JSONOut = GenErr(errNoLC:errMsgLC);
Clear JSONCLOB;
JSONCLOB.Data = %Trim(JSONOut);
JSONCLOB.Length = %Len(%Trim(JSONCLOB.Data));
GenLog();
Return;
*
* Generate Error Return
*
dcl-proc GenErr;
dcl-pi GenErr varchar(32766);
errNoLC char(6);
errMsgLC char(100);
end-pi;
dcl-s merrNo char(6);
dcl-s merrMsg char(100);
merrNo = errNoLC;
merrMsg = errMsgLC;
Clear JSONOut;
JSONOut = ' {"Status": { ' +
'"TransactionId": "f4674faa-2ef5-11ed-a261-0242ac120002", ' +
'"StatusCode": "' + %Trim(merrNo) + '", ' +
'"StatusMessage": "' + %Trim(merrMsg) + '", ' +
'"MoreInformation": "' + %Trim(merrMsg) + '" ' +
'}' +
'}';
Return JSONOut;
end-proc;
// _______________________________________________________________________
// | Generate Log Entry |
// |_____________________________________________________________________|
DCL-PROC GenLog;
FRDLOGOut.JSNTIMEC = %TimeStamp();
FRDLOGOut.JSNLOGOT = %Trim(JSONCLOB.Data);
If FRDLOGOut.JSNTIMEB = *LOVAL;
FRDLOGOut.JSNTIMEB = FRDLOGOut.JSNTIMEC;
ENDIF;
Write RFRDLOG FRDLOGOut;
// Write FRDLOG FRDLOGOut;
END-PROC GenLog;