如何使用java将带空格的json字符串传递给Python脚本?

问题描述 投票:-1回答:1

我正在尝试使用java运行Python脚本,如下所示:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Map;

import com.google.gson.Gson;

public class JsonToString {
    public static void main(String[] args) throws Exception {
        Map<String, String> map = new HashMap<>();

        map.put("Query", "test projects");
        Gson gson = new Gson();
        String json = gson.toJson(map);
        System.out.println("json:" + json);

        String scriptCmd = "python /Scripts/search_php.py \"" + json+"\"";
        System.out.println("scriptCmd:" + scriptCmd);

        Process p = Runtime.getRuntime().exec(scriptCmd);
        System.out.println("process:" + p);
        p.waitFor();
        System.out.println("process wait completed");
        String line;
        BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        System.out.println("*******ERROR*******");
        while ((line = error.readLine()) != null) {
            System.out.println(line);
        }
        error.close();

        System.out.println("*******INPUT*******");
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {
            System.out.println(line);
        }
        input.close();

        System.out.println("*******OUTPUT*******");
        OutputStream outputStream = p.getOutputStream();
        PrintStream printStream = new PrintStream(outputStream);
        printStream.println();
        printStream.flush();
        printStream.close();
    }
}

Python脚本的值如下:

argv data :"{"Query":"test

它忽略了空间之后的价值。基本上我必须将json字符串作为参数传递给python脚本。

{"Query":"test projects"}

要传递带空格的字符串(json字符串)作为参数,我用双引号括起来和/也要用它来转义它。但我无法传递确切的字符串。怎么做 ?

java python
1个回答
2
投票

如果使用ProcessBuilder类,则可以使用参数列表启动进程,而不仅仅是参数字符串。如果使用此类,则可以将整个JSON字符串放入单个参数中,并直接在Python端访问它。

但是,命令行参数的大小可能有些限制。 (限制因操作系统而异,也取决于系统配置。)将JSON数据写入Python进程的标准输入可能更可靠。 ProcessBuilder类也为此提供了一种机制。

© www.soinside.com 2019 - 2024. All rights reserved.