我需要从php执行Java代码,并传递一个JSON字符串作为参数。
PHP部分:
$json_arr["regrType"] = 3;
$json_arr["fund_id"] = 25106478;
$json_arr["factors"] = array(2,7,18,19);
$input = json_encode($json_arr);
exec("java StepRegTest.Main " . $input . " 2>&1", $output);
Java入口:
public class Main {
public static void main(String[] args) throws Exception {
问题是:因为"main"构造函数只能接受String[]数组,而不能接受简单的字符串,所以Java脚本将JSON字符串分解为类似数组的:
args[0] = "regrType:3"
args[1] = "fund_id:25106478"
args[2] = "factors:[2"
如何强制它接受整个JSON输入字符串?如果我找不到在Java中获得完整JSON字符串的方法,那么我该如何将数组作为JSON元素处理呢?参见args[2]?
我可以拆分数组部分并使用不同的分隔符,但也许还有一种更优雅的方法。
感谢
要将其作为单个字符串传递,请在其周围加引号。
因此,如果你使用,它应该可以工作
exec("java StepRegTest.Main '"" . $input . "'" 2>&1", $output); //Note the added quotes
这个问题与String与String[]无关,它只是一个问题,如果你不把它们放在引号里,函数参数就会用空格分隔。比较:
java SomeClass these are four arguments
java SomeClass "this is one argument"
编辑:最初我提到写过,你必须在字符串中转义引号;只是测试了一下,事实并非如此。示例:
java SomeClass "this is "still" one argument"
在Java代码中显示一个接口。使用PHP/Java Bridge 从PHP调用它