I can open the JSON in FireFox and Notepad++ without any errors... so I assume it's ok.
I left a counter on the important stuff... My program simply populates database files - all of the logic takes place in the subsequent program that processes the DB files.
So (for now), I have added allowmissing=yes. I'm not sure why this would be such a "terrible" solution here.
Greg
Here is the particular JSON
{
"creationTime": "01-06-2021 19:24:34.698+0000",
"response": [
{
"acceptBackOrder": 1,
"attachDocuments": null,
"billToAddress1": "2407 Steel Street",
"billToAddress2": null,
"billToCity": "Houston",
"billToCountry": null,
"billToName": "Kuhl-Linscomb Upper Kirby Inc.",
"billToState": "TX",
"billToZip": "77098",
"cancelDate": "2021-03-15",
"estimatedHandlingCost": null,
"estimatedShippingCost": null,
"externalID": "KathleenTEND010520211801151",
"externalID2": null,
"fOBLocation": null,
"manufacturerCommissionPercent": null,
"manufacturerDateSent": 1609950940157,
"manufacturerMethodSent": null,
"manufacturerOrderNumber": "766450938",
"manufacturerOrderStatus": "OPEN",
"newAccountToManufacturer": 0,
"notes": null,
"oOTCommissionReason": null,
"orderCode": "R",
"orderDate": "2021-01-05",
"orderDiscount": 0,
"orderTotal": 1072,
"orderType": "Line Item",
"paymentTerm": "NET60",
"paymentToken": null,
"pONumber": "86749",
"repGroupOrderStatus": "TRANSMITTED",
"requestDate": "2021-01-05",
"retailerDateSent": 1609826400000,
"retailerMethodSent": null,
"sentTrackingNumber": null,
"shipDate": null,
"shippingMethod": "FFA",
"shippingNotes": null,
"shipToAddress1": "2407 Steel Street",
"shipToAddress2": null,
"shipToCity": "Houston",
"shipToCountry": null,
"shipToName": "Kuhl-Linscomb Upper Kirby Inc.",
"shipToState": "TX",
"shipToZip": "77098 ",
"specialInstructions": "$500 Order: FFA",
"tags": null,
"manufacturerID": "M25405",
"salespersonOrderWriterID": "S1037",
"salespersonAssignedID": "S1037",
"orderDetails": [
{
"color": null,
"description": "Noah's Wooden Ark",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8306",
"itemStatus": null,
"listPrice": null,
"name": "Noah's Wooden Ark",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 1,
"size": null,
"style": null,
"unitPrice": 45,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Smoothie Maker",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8224",
"itemStatus": null,
"listPrice": null,
"name": "Smoothie Maker",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 8,
"size": null,
"style": null,
"unitPrice": 23,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Toaster & Egg Set",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8221",
"itemStatus": null,
"listPrice": null,
"name": "Toaster & Egg Set",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 9,
"size": null,
"style": null,
"unitPrice": 20,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Medical Set",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8111",
"itemStatus": null,
"listPrice": null,
"name": "Medical Set",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 10,
"size": null,
"style": null,
"unitPrice": 22.5,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Peacock Colours",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "tl8338",
"itemStatus": null,
"listPrice": null,
"name": "Peacock Colours",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 11,
"size": null,
"style": null,
"unitPrice": 12.5,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Noah's Shape Sorter Ark",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8305",
"itemStatus": null,
"listPrice": null,
"name": "Noah's Shape Sorter Ark",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 2,
"size": null,
"style": null,
"unitPrice": 25,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Baby Barn Set",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8301",
"itemStatus": null,
"listPrice": null,
"name": "Baby Barn Set",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 3,
"size": null,
"style": null,
"unitPrice": 35,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Rainbow Birthday Cake",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8282",
"itemStatus": null,
"listPrice": null,
"name": "Rainbow Birthday Cake",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 4,
"size": null,
"style": null,
"unitPrice": 10,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Shopping Grocery Bag",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8273",
"itemStatus": null,
"listPrice": null,
"name": "Shopping Grocery Bag",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 5,
"size": null,
"style": null,
"unitPrice": 17.5,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Ice Cream Cart",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8236",
"itemStatus": null,
"listPrice": null,
"name": "Ice Cream Cart",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 6,
"size": null,
"style": null,
"unitPrice": 32.5,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
},
{
"color": null,
"description": "Tea Tray Set",
"itemDiscount": 0,
"itemID": null,
"itemNumber": "TL8233",
"itemStatus": null,
"listPrice": null,
"name": "Tea Tray Set",
"notes": null,
"quantity": 4,
"retailerItemNumber": null,
"sequenceID": 7,
"size": null,
"style": null,
"unitPrice": 25,
"unitQty": 1,
"priceCode": null,
"upc": null,
"itemSCSID": null,
"bulkEditError": null,
"unitPriceModified": false
}
],
"orderPayments": [],
"orderPaymentTokens": [],
"orderPromotions": [],
"repGroup": {
"recordID": "R36",
"address1": "2050 N. Stemmons Frwy Ste 8654",
"address2": null,
"city": "Dallas",
"country": "USA",
"email": "teri@xxxxxxxxxxxxxxxxxxxxxxx",
"fax": "9726906127",
"faxCountryCode": null,
"faxExtension": null,
"name": "Young Associates",
"phone": "4694419471",
"phoneCountryCode": null,
"phoneExtension": null,
"state": "TX",
"website": "www.youngassociatestoys.com",
"zip": "75207",
"latitude": null,
"longitude": null
},
"retailerID": "B159594",
"retailerCarrierAccount": null,
"retailerContact": {
"cell": null,
"cellCountryCode": null,
"email": "pam@xxxxxxxxxxxxxxxxx",
"fax": null,
"faxCountryCode": null,
"faxExtension": null,
"firstName": "Pam",
"lastName": "Kuhl-Linscomb",
"middleName": null,
"phone": "7135204000",
"phoneCountryCode": null,
"phoneExtension": null,
"isPrimary": null,
"title": null
},
"retailerShipToID": 47883,
"salesperson1": {
"name": "Kathleen Schroeder"
},
"salesperson2": {
"name": "Kathleen Schroeder"
},
"repGroupRetailerManufacturers": null,
"recordID": "1f535eaa-df1f-4c35-a45b-9a67ca357e2e"
}
],
"success": true
}
-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxxxxxxxx] On Behalf Of Jon Paris
Sent: Wednesday, January 06, 2021 3:59 PM
To: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Subject: Re: DATA-INTO Error RNX0356 (json)
Off the top of my head the only thing I can think of is that datasubf _might_ handle it. It is a similar situation to and XML element with both data and attributes. You'd still need a count or allowmissing.
I was going to try it for you but you haven't given enough of the JSON or me to be able to produce a valid JSON file that demonstrates your code.
You have validated the JSON right?
Jon
On Jan 6, 2021, at 3:00 PM, Greg Wilburn <gwilburn@xxxxxxxxxxxxxxxxxxxxxxx> wrote:
I'm consuming a relatively new web service... just wondering if the error I'm getting is due to my poor coding, or their poor implementation.
Message . . . . : The document for the DATA-INTO operation does not match
the RPG variable; reason code 4.
The exact subfield ..
json.response(1).repgroupretailermanufacturers.accountnumber
UGGHHH...
My DS looks like this...
...more above
num_repgroupretailermanufacturers uns(5) inz(0);
dcl-ds repgroupretailermanufacturers;
accountnumber varchar(10) inz(''); // This is our Customer Number
// minimumorderamount varchar(1) inz('');
// minimumreorderamount varchar(1) inz('');
// shipToAccountnumber varchar(1) inz('');
end-ds;
...more below
dcl-c RPGOPTS const('doc=file case=convert allowextra=yes countprefix=num_');
dcl-c YAJLOPTS const('{ "value_null": "", "document_name": "json"}');
monitor;
Data-Into json %data(inStmf:RPGOPTS) %parser('YAJLINTO':YAJLOPTS);
on-error;
ouErrors = 1;
return;
endmon;
The JSON array causing the error normally looks like this:
"repGroupRetailerManufacturers": {
"accountNumber": "10434741",
"minimumOrderAmount": 250,
"minimumReOrderAmount": 250,
"shipToAccountNumber": null
},
However, this document contains:
"repGroupRetailerManufacturers": null,
Short of having a NUM_ variable in front of EVERY element, is my only option to do allowmissing=yes??
(I can "feel" Jon Paris leaning over my shoulder while I code) LOL
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.
Help support midrange.com by shopping at amazon.com with our affiliate link: https://amazon.midrange.com
As an Amazon Associate we earn from qualifying purchases.