【问题标题】:Return Array from Java to Python将数组从 Java 返回到 Python
【发布时间】:2019-12-05 04:03:45
【问题描述】:

您好,我正在尝试将数组从 java(jar 文件)返回到 Python,但只返回数组类型字符串:

"['DIEGO ALBERTO AVILA', '', 'ACTIVO', 'N', 'OTRO', 'CEVALLOS', 'S/N','MOLINA']"

我如何从 python 调用 java:

import shlex, subprocess
import json

PARAMETRO = "1804464194001"
JAVA_CMD = 'java'
JAR_PATH = "catastro.jar"
command = [
    JAVA_CMD,
    '-jar',
    JAR_PATH,
    PARAMETRO
]
p = subprocess.Popen(
    command,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    #shell=True
)

result = p.communicate()[0]
print(result)

Java 代码:

ArrayList<String> result = new ArrayList<String>();
....
try {
    PreparedStatement st = conn.prepareStatement(query);
    ResultSet rs = st.executeQuery();
    while(rs.next()) {
        //data resultset
        String razonSocial = rs.getString("RAZON_SOCIAL");
        String nombreComercial = rs.getString("NOMBRE_COMERCIAL");
        String estadoContribuyente = rs.getString("ESTADO_CONTRIBUYENTE");
        String obligado = rs.getString("OBLIGADO");
        String tipoContribuyente = rs.getString("TIPO_CONTRIBUYENTE");
        String calle = rs.getString("CALLE");
        String numero = rs.getString("NUMERO");
        String interseccion = rs.getString("INTERSECCION");

        //data ArrayList
        result.add(razonSocial);
        result.add(nombreComercial);
        result.add(estadoContribuyente);
        result.add(obligado);
        result.add(tipoContribuyente);
        result.add(calle);
        result.add(numero);
        result.add(interseccion);

        //return result
        System.out.println(result);
    }
    conn.close();
    rs.close();
    st.close();
} catch(SQLException e) {
    e.printStackTrace();
}

在这种情况下,我尝试使用 JSON 但返回相同类型的字符串而不是数组。 也许有人建议。

更新

我试试这个(在 python 上):

json.loads(result) 

或者这个:

ast.literal_eval(result) 

当我打印这个时:

print(type(ast.literal_eval(result)))

得到这个错误:

文件“invoque.py”,第 23 行,在 print(type(ast.literal_eval(ini_list))) 文件“/usr/lib64/python2.7/ast.py”,第 49 行,在 literal_eval 中 node_or_string = parse(node_or_string, mode='eval') File "/usr/lib64/python2.7/ast.py", line 37, in parse 返回编译(源,文件名,模式,PyCF_ONLY_AST)文件“”,第1行 [LOACHAMIN AVILA DIEGO ALBERTO, , ACTIVO, N, PERSONAS NATURALES, MANUEL CAN, S/N, 巴西]

但得到相同类型的“字符串”谢谢..!!

谢谢..!!

【问题讨论】:

  • 你能发布print(type(ast.literal_eval("['DIEGO ALBERTO AVILA', '', 'ACTIVO', 'N', 'OTRO', 'CEVALLOS', 'S/N','MOLINA']") ))的输出吗
  • 好的,我发布这个印刷品..!!

标签: java python


【解决方案1】:

将字符串转换回列表怎么样?

eval("['DIEGO ALBERTO AVILA', '', 'ACTIVO', 'N', 'OTRO', 'CEVALLOS', 'S/N','MOLINA']")

您可能希望将其保存回变量result

result = eval(result)

【讨论】:

  • 谢谢,但是当我使用它并打印“type(result)”..get type string
  • 你需要用你的尝试更新帖子。type(eval("['DIEGO ALBERTO AVILA', '', 'ACTIVO', 'N', 'OTRO', 'CEVALLOS', 'S/N','MOLINA']")) 将定义返回list
猜你喜欢
  • 2021-06-08
  • 2020-07-20
  • 1970-01-01
  • 2011-06-30
  • 2010-12-09
  • 1970-01-01
  • 2011-12-13
  • 2012-01-11
  • 1970-01-01
相关资源
最近更新 更多