โ03-06-2019 08:51 AM
Hello,
I am trying to run a python script in the script snap that mocks up some test data for unit testing pipelines. The script relies on python data types such as list and dictionary to iterate through the incoming JSON document and manipulate it.
However, the document coming in are of type java.util.LinkedHashMap. When trying to convert to a python dict using dict(in_doc), it doesnโt process the document into a dict correctly.
Initial googling returned a number of jython bug around this issue. Is there any workaround for this that I can implement?
You can see the script here: test-file-gen/snap-file-gen.py at master ยท jskrable/test-file-gen ยท GitHub
Thanks,
Jack
โ03-06-2019 09:00 AM
Hi Jack,
the best work around to this use json.loads and json.dumps; json.loads(in_doc.get(โstr_jsonโ)). use a mapper with JSON.stringify() to represent JSON as string and then you can use json.loads() in the script.
โ02-05-2021 01:31 AM
Have you ever found a good solution to this besides converting it to a string prior?
Generally, the proposed method by @jaybodra works, but it seems more like a short-term workaround.
Additionally, Iโm unable to retain the sorting of the dumps after re-loading it, even when telling it to do so specifically. So this only leaves the option of entering a string and passing out a string and then using JSON.parse(), then it will actually be an ordered json โฆ ๐ฎ
json_input = json.loads(inDoc.get('content'))
json_string = json.dumps(json_input, sort_keys=True)
json_output = json.loads(json_string, object_pairs_hook=OrderedDict)
Best regards
Thomas