java调用python,并接收python返回对象数组,但是取对象里的值的时候取不出来

java调用python,并接收python返回对象数组,但是取对象里的值的时候取不出来

img


img

img


这是python返回形式

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/252251
  • 这篇博客也不错, 你可以看下最详细的java调用含参数的python程序并且返回值
  • 除此之外, 这篇博客: java中调用python脚本实现传参并且返回数据测试中的 python测试文件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    import json
    import requests
    def power(x, y):
        d = {"name":x,"age":y};
        c = {"data":d}
        return json.dumps(c);
    #print(power("lisi",12));    
    

    这时候在python中就可以使用发送post等请求进行请求数据了。

    注意:由于可能安装了python,故在python的安装目录下会有对应的pip执行文件,而jython也有这个执行文件,他们安装的东西放的地方不一样,应该在环境变量中设置(哪个在上面,哪个就先找到从而执行)。
    jython安装requests模块和python是一样的。

    pip install requests
    

    执行完成之后,可以到jython 安装目录下找到安装的requests模块。
    在这里插入图片描述
    另外一点切记,别瞎用软件编辑python,最好用专门的软件,空格和tab不一样。

  • 您还可以看一下 马良老师的Python入门课,人工智能时代比java还有用的语言课程中的 Python是什么小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    由于Markdown不支持Java代码,因此我将在下面提供一个Java代码框,以便说明如何在Java中调用Python并接收返回的对象数组。请注意,以下代码只是示例,并不一定适用于你的具体情况,你需要根据实际情况进行调整。

    首先,你需要确保你的Java程序可以调用Python代码。你可以使用Java的ProcessBuilder类来实现这一点。下面是一个基本的示例:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class PythonCaller {
        public static void main(String[] args) {
            try {
                ProcessBuilder pb = new ProcessBuilder("python", "your_python_script.py");
                Process process = pb.start();
    
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    // 在此处处理Python输出的每一行
                    System.out.println(line);
                }
                reader.close();
    
                int exitCode = process.waitFor();
                System.out.println("Exited with code " + exitCode);
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    请将your_python_script.py替换为你实际的Python脚本文件名。

    接下来,你需要了解如何在Python中返回一个对象数组给Java。你可以使用json模块将Python对象转换为JSON格式,并将其输出到标准输出。在Java中,你可以使用ProcessBuilder中的getInputStream()方法来读取Python脚本的输出,然后使用Java的json库解析JSON并获取对象数组。你可以参考以下示例代码:

    Python脚本(your_python_script.py):

    import json
    
    # 创建一个对象数组
    objects = [{'id': 1, 'name': 'Object 1'}, {'id': 2, 'name': 'Object 2'}, {'id': 3, 'name': 'Object 3'}]
    
    # 将对象数组转换为JSON格式的字符串
    json_str = json.dumps(objects)
    
    # 打印JSON字符串到标准输出
    print(json_str)
    

    Java代码:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import com.google.gson.Gson;
    
    public class PythonCaller {
        public static void main(String[] args) {
            try {
                ProcessBuilder pb = new ProcessBuilder("python", "your_python_script.py");
                Process process = pb.start();
    
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                StringBuilder jsonBuilder = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    jsonBuilder.append(line);
                }
                reader.close();
    
                // 解析JSON字符串为对象数组
                Gson gson = new Gson();
                YourObject[] objects = gson.fromJson(jsonBuilder.toString(), YourObject[].class);
    
                // 在此处处理对象数组
                for (YourObject obj : objects) {
                    System.out.println("ID: " + obj.getId() + ", Name: " + obj.getName());
                }
    
                int exitCode = process.waitFor();
                System.out.println("Exited with code " + exitCode);
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        // 你的对象类
        static class YourObject {
            private int id;
            private String name;
    
            public int getId() {
                return id;
            }
    
            public void setId(int id) {
                this.id = id;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
        }
    }
    

    请注意,你需要在YourObject类中添加适合你的对象的属性和访问方法。

    这就是一个基本的Java调用Python并接收返回的对象数组的示例。请根据你的实际情况进行调整和扩展。

    希望这可以帮助到你!如果你还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^