Symfony 4 Командная строка отправляет массив строк JSON - PullRequest
0 голосов
/ 03 мая 2018

Привет, я изучил PHP и Symfony. Что я пытаюсь сделать эту программу:

Команда должна принимать строковый параметр, содержащий массив продуктов в формате JSON. Он должен возвращать массив строки JSON с продуктами, отсортированными по возрастанию цены, и если цена такая же, отсортированные по алфавиту по возрастанию. Пример параметра JSON:

```
[   
{
    "title": "H&M T-Shirt White",
    "price": 10.99,
    "inventory": 10
},
{
    "title": "Magento Enterprise License",
    "price": 1999.99,
    "inventory": 9999
},
{
    "title": "iPad 4 Mini",
    "price": 500.01,
    "inventory": 2
},
{
    "title": "iPad Pro",
    "price": 990.20,
    "inventory": 2
},
{
    "title": "Garmin Fenix 5",
    "price": 789.67,
    "inventory": 34
},
{
    "title": "Garmin Fenix 3 HR Sapphire Performer Bundle",
    "price": 789.67,
    "inventory": 12
}
]
```

Проблема в том, что я не могу ввести входы в консоль. Я не нашел способ ввода объектов JSON в консоль. Я пытался сделать это вручную, но проблема в том, что я получаю плохо измельченный текст позже. Это связано с ("") и (''). например:

 php .\bin\console js_arr "{'title': 'H&M T-Shirt White', 'price': 
 10.99,'inventory': 10},{'title': 'Magent
 o Enterprise License','price':1999.99,'inventory': 9999}"
 array(1) {
 [0]=>
  string(136) "{'title': 'H&M T-Shirt White', 'price': 10.99,'inventory': 
 10},{'title': 'Magento Enterprise License','price':1999.99,'inventory': 
 9999}"
 }

У меня есть хорошая строка, отправленная в программу, но мне нужно вручную изменить кавычки.

PS D:\comand> php .\bin\console js_arr '{"title": "H&M T-Shirt White", 
"price": 10.99,"inventory": 10},{"title": "Magent
o Enterprise License","price":1999.99,"inventory": 9999}'
array(5) {
[0]=>
string(11) "{title: H&M"
[1]=>
string(7) "T-Shirt"
[2]=>
string(50) "White, price: 10.99,inventory: 10},{title: Magento"
[3]=>
string(10) "Enterprise"
[4]=>
string(38) "License,price:1999.99,inventory: 9999}"
}

И это плохой пример

Пожалуйста, вносите предложения и подсказки.

1 Ответ

0 голосов
/ 09 августа 2018

Или

Вы передаете свой JSON с двойными кавычками

php bin/console my:myCommand {\"foo\":\"bar\"}

В вашем классе команд вы получите его как действительный JSON {"foo":"bar"}.

А потом разбери его $argument = json_decode($input->getArgument('myArgumentKey'), true);

OR

Как и предлагалось ILikeTacos, не передавайте json через команду, помещайте ее в файл, возможно, в yml, затем позвольте вашей команде прочитать этот файл и проанализировать данные.

Для более сложных структур JSON и удобства использования я предпочитаю это решение, поэтому вам не нужно каждый раз добавлять обратную косую черту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...