在Python和Oracle中将XML转换为JSON

时间:2018-10-25 17:16:05

标签: python json oracle

我有生以来第一次使用Python,但遇到一个我找不到解决方法的问题,因此我会尽力清楚地尽可能地向自己解释并阅读他们的评论。 我把它们放在上下文中。我正在做一个微服务,应该返回一个对象的属性。 微服务可视化必须采用JSON格式。

我一直在做一些测试(没有一个对我有用)。一种是Oracle存储过程,用于返回XML,因为我希望sp代码更具动态性。 我不知道如何使用该输出变量并将其转换为Oracle本身内的JSON。或者,如果不能,我想知道是否可以使用Python将输出变量转换为JSON

我不太喜欢的另一种方法是在SP中制作“ JSON ”格式并返回该内容的varchar。

生成JSON的第二个选项,程序包执行以下操作:

PROCEDURE get_attributes (p_element IN VARCHAR2, p_list OUT CLOB) AS
    str_json_inicial    VARCHAR2(100) := '{';
    str_json_final      VARCHAR2(100) := '"}';
    str_json1           VARCHAR2(100) := '"role":"';
    str_json2           VARCHAR2(100) := '","identification":"';
    str_json3           VARCHAR2(100) := '","class":"';
    str_json4           VARCHAR2(100) := '","country":"';
    str_json5           VARCHAR2(100) := '","stateOrProvince":"';
    str_json6           VARCHAR2(100) := '","city":"';
    str_json7           VARCHAR2(100) := '","locality":"';
    str_json8           VARCHAR2(100) := '","streetName":"';
    str_json9           VARCHAR2(100) := '","streetNr":"';
    str_json10          VARCHAR2(100) := '","x":"';
    str_json11          VARCHAR2(100) := '","y":"';
    respuesta           CLOB;
BEGIN
    select 
        TO_CLOB(str_json_inicial
        || str_json1
        || 'completarRol' 
        || str_json2
        || id_equipo_gis 
        || str_json3
        || 'completarClass' 
        || str_json4
        || pais 
        || str_json5
        || provincia 
        || str_json6
        || partido 
        || str_json7
        || localidad 
        || str_json8
        || calle 
        || str_json9
        || altura 
        || str_json10
        || poste_x 
        || str_json11
        || poste_y 
        || str_json_final)
        into p_list
    from xxy_osf_equ_equipos
       where id_equipo_gis = p_element;
    EXCEPTION WHEN NO_DATA_FOUND then
    BEGIN
        p_list := to_clob('{}');
    END;
    WHEN OTHERS then
    BEGIN
        p_list := to_clob('{ERROR}');
    END;
END get_attributes;

在这两种情况下,我都不知道如何使其工作。

我将为您提供一些我所做的第一个服务的Python示例行,它对我有用,但这非常棘手。

listOutput = cur.var(cx_Oracle.CURSOR)
l = cur.callproc('relationships.get_relationships', (elementId, listOutput))
cur = database.db.cursor()
result = []
for cur in listOutput.getvalue().fetchall():
    result.append({
                  'identification': cur[0],
                  'elementRole': cur[1],
                  'direction': cur[2],})
return result

其中listOutput是oracle的游标类型变量,我将放置JSON标记。

有人有什么想法,建议或建议吗?

0 个答案:

没有答案