php shell命令返回JSON


php shell command to return JSON

我写了一个脚本,当它在shell上执行时,它将返回JSON输出。

{
  "count": 1,
  "virtualmachine": [
    {
      "account": "admin",
      "affinitygroup": [],
      "cpunumber": 2,
      "cpuspeed": 1000,
      "created": "2015-04-02T12:11:41-0400",
      "details": {
        "hypervisortoolsversion": "xenserver56"
      },
      "diskofferingid": "6fec5275-9ec3-4033-8052-b743b3f89303",
      "diskofferingname": "Medium",
      "zoneid": "60763583-8ab3-436e-8acd-87c783729cdc",
      "zonename": "Toronto"
    }
  ]
}

当我从php代码中运行这个shell命令时,我无法打印这个输出。

exec('cloud_query " list virtualmachines listall=true account=$user"', $outputArray);
print_r ($outputArray, false);

我得到以下信息:

Array
(
    [0] => {
    [1] =>   "count": 1,
    [2] =>   "virtualmachine": [
    [3] =>     {
    [4] =>       "account": "admin",
    [5] =>       "affinitygroup": [],
    [6] =>       "cpunumber": 2,
    [7] =>       "cpuspeed": 1000,
    [8] =>       "created": "2015-04-02T12:11:41-0400",
    [9] =>       "details": {
    [10] =>         "hypervisortoolsversion": "xenserver56"
    [11] =>       },
    [12] =>       "diskofferingid": "6fec5275-9ec3-4033-8052-b743b3f89303",
    [13] =>       "diskofferingname": "Medium",
    [52] =>       "serviceofferingid": "76d3bacc-eba4-4080-ba72-7c0b524f8027",
    [53] =>       "serviceofferingname": "Large Instance",
    [54] =>       "state": "Running",
    [55] =>       "tags": [],
    [56] =>       "templatedisplaytext": "ubuntu-12.04.4-server-amd64",
    [57] =>       "templateid": "cbd3ceb0-b615-440e-a0fa-dbcaa234cb8f",
    [58] =>       "templatename": "ubuntu-12.04.4-server-amd64",
    [59] =>       "zoneid": "60763583-8ab3-436e-8acd-87c783729cdc",
    [60] =>       "zonename": "Toronto"
    [61] =>     }
    [62] =>   ]
    [63] => }
)

如何从shell命令中剥离数组并打印纯JSON?

感谢

您正在将exec-ed命令的输出捕获到一个行数组中。要将其转换为字符串,只需将其所有值与换行符连接即可:

implode("'n", $outputArray);

指定的数组将填充命令的每一行输出。

分开使用:

echo implode("'n", $output);