Paul,
When you use the DATA-INTO %PARSER() BIF, there's a 2nd parameter where
you can specify options. For YAJLINTO, these options are passed in the
form of a JSON document that can affect how YAJLINTO operates. There
aren't many options, here, and I think it's probably unusual that
someone would use them.
All options are optional, you only need to pass the ones you want to
change.
%PARSER( 'YAJLINTO'
: '{ +
"value_true": "1", +
"value_false": "0", +
"value_null": "*NULL", +
"document_name": "whatever" +
}');
The value_true/value_false relate to JSON boolean fields. By default,
it maps "1" for true, and "0" for false because it's assumed that a JSON
boolean would be mapped to an RPG indicator. But you can override that
to any character string you like.
value_null is the value mapped when a JSON field is set to the special
value of null. RPG does not allow DATA-INTO to set a field's %NULLIND
(null indicator) so all we can do is map a value to a field. It
defaults to *NULL to indicate a field was null. In my experience, null
fields are very unusual in business documents.. but if this does come
up, you can map it to any character string you like.
document_node is a name assigned to the document node (outermost
element) of a JSON document. By default, the document node is never
assigned a name. (Indeed, the JSON standard has no provision for
assigning a name to the outermost node.) This option is a workaround
for a problem with DATA-INTO's "path" option. Since DATA-INTO is based
on the older XML-INTO tool, and XML always gives names to all XML tags,
the "path" option only works when an element has a name... since
document nodes never have a name in JSON, the "path" option doesn't
really work in DATA-INTO. This option allows you to work around that
by giving a name to the outermost element so that it'll work with
"path". Frankly, this is a kludge... the "right" fix for this is to
fix DATA-INTO so that an element doesn't need to have a name, but that
requires a change from IBM (not me)...
For example, say you have this document:
{
"name": "XX",
... other fields here...
"address": {
... other fields here...
"postal": "12345"
}
}
If you only wanted the "postal" field and didn't want to read the whole
document, you could do:
%DATA(myJSON: 'path=doc/address/postal') %PARSER('YAJLINTO': '{
"document_name": "doc" }')
The problem is that "address" is inside some { } characters that have no
name assigned to them. You can't do a path=/address/postal because
DATA-INTO doesn't understand how to map an unnamed element. So
"document_name" assigns the name "doc" to that outermost element,
allowing you to do path=doc/address/postal
The "right" fix to that would be to change "path", since this is
perfectly normal in JSON... I need to file a PMR with IBM to get that
fixed.
-SK
On 6/12/2018 10:19 AM, Steinmetz, Paul wrote:
I downloaded the latest YAJL.zip file from http://www.scottklement.com/yajl/.
Restored the objects form the YAJLLIB72.savf.
I'm looking for the details of the 05/17/2018 update.
Note: Updated May 17, 2018 added additional options to YAJLINTO.
Any one from the group know what the additional options added to YAJLINTO are?
Thank You
_____
Paul Steinmetz
IBM i Systems Administrator
Pencor Services, Inc.
462 Delaware Ave
Palmerton Pa 18071
610-826-9117 work
610-826-9188 fax
610-349-0913 cell
610-377-6012 home
psteinmetz@xxxxxxxxxx
http://www.pencor.com/
As an Amazon Associate we earn from qualifying purchases.