2013-09-04 1 views
0

Мне нужно выполнить Java-код из php и передать строку JSON в качестве аргумента.Вызов Java из PHP с аргументами 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 { 

Вот проблема: потому что "главный" конструктор может принимать только массив строк [], а не простой строки, в Java сценарий разбивает строку JSON на массив - например:

args[0] = "regrType:3" 
args[1] = "fund_id:25106478" 
args[2] = "factors:[2" 

Как я могу заставить его взять все Входная строка JSON? Если я не могу найти способ получить неповрежденную строку JSON в Java, что я могу сделать с массивами как элементы JSON - см. Args [2]?

Я мог бы разделить массив и использовать другой разделитель, но, возможно, есть более элегантный способ сделать это.

Благодаря

+0

Вам нужно указать и убрать строку, которую вы передаете в командной строке. Но мне трудно найти вескую причину. – datasage

+0

Если вам нужно получить значение от JAVA до PHP, вы можете использовать CURL в PHP для публикации и получения значений из JAVA-приложения, поскольку JSON –

+0

- это Java, а не JavaScript. Проблема в том, что основной конструктор Java может принимать только массив String [], но PHP exec передает строку. Также у меня нет проблем с получением значений из java в PHP. – user2723490

ответ

2

пройти все это в одну строку, поместите его в кавычки.

Так оно и должно работать, если вы используете

exec("java StepRegTest.Main \"" . $input . "\" 2>&1", $output); //Note the added quotes 

вопрос не имеет ничего общего с Последовательностью против String [], это просто вопрос, который, если не поставить их в кавычки аргументы функции ограниченное пробелами. Сравните:

java SomeClass these are four arguments

java SomeClass "this is one argument"

EDIT: Первоначально я уже писал, что вы должны были бежать цитаты в пределах строки; просто испытал это, это не тот случай. Пример:

java SomeClass "this is "still" one argument"

+0

Спасибо, он сделал трюк! Фактически, я попытался избежать строки JSON, но не добавил двойные кавычки в строку exec. Кроме того, он не работает, если вы не избежите строки JSON - двойных кавычек внутри команды exec недостаточно. – user2723490

+1

+1 для прямого ответа на вопрос, вместо того, чтобы спрашивать, почему OP не будет использовать 1 язык или использовать совершенно другой метод. – Ascendant

+0

Re: String vs. String []. Что происходит, когда мы передаем строку через PHP exe на Java-sub с массивом String [] в качестве аргумента? Если мы передадим то же самое с Java на Java, это вызовет исключение, но в нашем случае Java принимает входную строку как args [0]. Зачем? – user2723490

Смежные вопросы