Nathan,

did you look at the notes/examples in the "Working with JSON" handout on my site?
http://www.scottklement.com/presentations/Working%20with%20JSON%20in%20RPG.pdf

Does that provide enough information for you?

What yajl_stmf_load_tree() does is parse the JSON data into a set of data structures in memory. So once this is complete, it is no longer in JSON format, now it is just structures in memory. The pointer returned (docNode) is a pointer to the document node of this memory tree. from that, you can get it's child nodes. From those child nodes, you can go deeper and get their child nodes, etc.

You don't necessarily have to know the structure of the document in advance, but it certainly does simplify your code, and this is what is desired in 99% of the cases. Can you give me an example of where you'd want to process data without knowing the format in advance? What would you do with the results in that case?

But, it should be doable. You can do something like:

if YAJL_IS_OBJECT(docNode);
dow YAJL_OBJECT_LOOP(docnode: i: key: val);
// do something (but what?) with the key and value.
enddo
endif

likewise, you'd have to interrogate each subnode to determine if they are objects, arrays, or just straight values. This could be done recursively... but where I struggle is not with calling YAJL, but rather what you do with the results.

My experience with both JSON and XML is that you typically know the format in advance, and you code a data structure in RPG (or some similar structure like record formats in a PF) that matches the format of the file, so you do indeed know the format in advance, and you use something like XML-INTO or XML-SAX to load them with XML. The same thing is available here with YAJL's tree routines (similar to XML-INTO in a way, though since it's not built into the compiler it can't get the names from the DS definition) or YAJL's stream-oriented routines (similar to XML-SAX)

Do you have situations where you parse documents without any knowledge of their format in advance? How does that work?


On 6/1/2015 12:19 PM, Nathan Andelin wrote:
Following are a few code snippets from one of Scott Klement's presentations
on YAJL:

docNode = yajl_stmf_load_tree( '/tmp/example.json' : errMsg );

Without additional documentation or reviewing the code, it's not clear what
yajl_stmf_load_tree() may be doing doing. Is it really parsing the stream
file? Or is it just returning a pointer to the first "node" in the tree?

The following appears to be parsing, but the syntax affirms that the
programmer must know the layout of the file beforehand - that it contains
an array of objects which contains a set of name-value pairs.

list = YAJL_object_find(docNode: 'list');

i = 0;

dow YAJL_ARRAY_LOOP( list: i: node );
j = 0;
dow YAJL_OBJECT_LOOP( node: j: key: val);
exsr load_subfield;
enddo;
enddo;


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.