qiguai54 2023-07-24 21:52 采纳率: 48%
浏览 29

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

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

img


img

img


这是python返回形式

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-25 09:10
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这个问题的回答你可以参考下: 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并接收返回的对象数组的示例。请根据你的实际情况进行调整和扩展。

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


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

报告相同问题?

问题事件

  • 创建了问题 7月24日

悬赏问题

  • ¥30 vmware exsi重置后的密码
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面