doberkofler / PLSQL-JSON

The JSON encode/decode library for Oracle PL/SQL
MIT License
47 stars 15 forks source link

Alterations to json_object after parsing a JSON string are not possible #7

Open fb-datax opened 8 years ago

fb-datax commented 8 years ago

After a JSON string has been parsed into a json_object, modifications (put('field','value')) are not included in the non-raw output.

Sample code:

set serveroutput on size unlimited;
declare
    v_json          json_object;
    v_json_string   varchar(32000)      := '{"data":[{"p1":["a1",8.11],"p2":["a1",8.11]},{"p1":["a1",8.11],"p2":["a1",8.11]}]}';

begin
    v_json := json_object(v_json_string);
    json_debug.output(v_json, false);
    v_json.put('newnode','somevalue');
    json_debug.output(v_json, false); /* missing newnode*/
    json_debug.output(v_json, true); /* contains newnode*/
end;
/

The lastID in the json_obejct is not set to the last root node of the parsed json.

I did fix this in my fork but I had to include some more changes like the possibility to check to current running version. If time allows it I'll try to send a proper merge request in the next few days. Commits: ~~fb-datax/PLSQL-JSON@9116883824eea1a156251b6a74185e9cdd4cee82 fb-datax/PLSQL-JSON@f1b36e7a345934140679e962ad3e5e632dfdb052~~

Update: Proposed fix does only works for root node

doberkofler commented 7 years ago

@fb-datax Could you please try using the latest release as it includes several corrections when modifying an existing json structure.

fb-datax commented 7 years ago

The 2nd outout json_debug.output(v_json, false); still doesn't contain the newly added 'newnode'.

We did circumvent the problem with a new routine which loops through the structure and creates a fresh copy of the parsed json_object in order to be able to add new nodes and values.