work with json in oracle

后端 未结 6 673
梦谈多话
梦谈多话 2020-12-02 15:06

Is there an easy way to work with JSON within oracle? I have a standard procedure that I use to call web services quite often, JSON is a format that I am familiar with in w

6条回答
  •  无人及你
    2020-12-02 15:23

    I have started using this library, and it seems promising: https://github.com/pljson/pljson

    Easy to install, and the examples are good.

    To use the library in your example, add these variables to your procedure..

    mapData     json;
    results     json_list;
    status      json_value;
    firstResult json;
    geometry    json;
    

    ....

    Then you can manipulate the response as a json object.

    -- convert the result from the get to a json object, and show some results.
    mapData := json(v_ans);
    
    -- Show the status of the request
    status := mapData.get('status');
    dbms_output.put_line('Status = ' || status.get_string());
    
    IF (status.get_string() = 'OK') THEN
      results := json_list(mapData.get('results'));
      -- Grab the first item in the list
      resultObject := json(results.head);
    
      -- Show the human readable address 
      dbms_output.put_line('Address = ' || resultObject.get('formatted_address').to_char() );
      -- Show the json location data 
      dbms_output.put_line('Location = ' || resultObject.get('geometry').to_char() );
    END IF;
    

    Running this code will output this to the dbms output:

    Status = OK
    Address = "St Paul, MN 55105, USA"
    Location = {
      "bounds" : {
        "northeast" : {
          "lat" : 44.9483849,
          "lng" : -93.1261959
        },
        "southwest" : {
          "lat" : 44.9223829,
          "lng" : -93.200307
        }
      },
      "location" : {
        "lat" : 44.9330076,
        "lng" : -93.16290629999999
      },
      "location_type" : "APPROXIMATE",
      "viewport" : {
        "northeast" : {
          "lat" : 44.9483849,
          "lng" : -93.1261959
        },
        "southwest" : {
          "lat" : 44.9223829,
          "lng" : -93.200307
        }
      }
    }
    

提交回复
热议问题