【问题标题】:Pass JSON Data from PHP to Python Script将 JSON 数据从 PHP 传递到 Python 脚本
【发布时间】:2016-07-28 03:02:32
【问题描述】:

我希望能够将 PHP 数组传递给 Python 脚本,该脚本将利用这些数据来执行一些任务。我想尝试使用 shell_exec() 从 PHP 执行我的 Python 脚本并将 JSON 数据传递给它(我是全新的)。

$foods = array("pizza", "french fries");
$result = shell_exec('python ./input.py ' . escapeshellarg(json_encode($foods)));
echo $result;

“escapeshellarg(json_encode($foods)))”函数似乎将我的数组按以下方式传递给 Python 脚本(如果我“回显”该函数,我会得到这个值:

'["pizza","french fries"]'

然后在 Python 脚本里面:

import sys, json
data = json.loads(sys.argv[1])
foods = json.dumps(data)
print(foods)

这会将以下内容打印到浏览器:

["pizza", "french fries"]

这是一个普通的旧字符串,而不是列表。我的问题是,我怎样才能最好地将这些数据视为一个列表,或者某种我可以用“,”作为分隔符遍历的数据结构?我真的不想将文本输出到浏览器,我只想能够将列表分解成几部分并将它们插入文件系统上的文本文件中。

【问题讨论】:

  • 在您的示例中 (data = json.loads(sys.argv[1])) data 已经是 list,然后使用 dumps 您将其再次转换回字符串

标签: php python json


【解决方案1】:

遇到同样的问题

让我告诉你我做了什么

PHP:

base64_encode(json_encode($bodyData))

然后

json_decode(shell_exec('python ' . base64_encode(json_encode($bodyData)) );

在 Python 中我有

import base64

content = json.loads(base64.b64decode(sys.argv[1]))

正如 Em L 已经提到的:)

它对我有用 干杯!

【讨论】:

  • 它与 PHP 到 python 中的多维数组一起使用。
  • 我希望这适用于跨平台
【解决方案2】:

你可以base64foods转成字符串,然后将数据传给Python并解码。例如:

import sys, base64
if len(sys.argv) > 1:
    data = base64.b64decode(sys.argv[1])
    foods = data.split(',')
    print(foods)

【讨论】:

    【解决方案3】:

    如果您有 json 字符串:data = '["pizza","french fries"]' 并且 json.loads(data) 不起作用(它应该),那么您可以使用:MyPythonList = eval(data)eval 接受一个字符串并将其转换为 python 对象

    【讨论】:

      【解决方案4】:

      在将 json 从 PHP 传递到 Python 时遇到问题,我的问题是转义 json 字符串,您正在这样做。但看起来你正在解码然后用“食物”重新编码

      据我了解

      Python json.dumps(data) == PHP json_encode(data)

      Python json.loads(data) == PHP json_decode(data)

      json.loads(data) -> 字符串数据

      json.load(data) -> 文件数据

      json.dumps(data) -> 字符串数据

      json.dump(data) -> 文件数据

      PHP:

      $foods = array("pizza", "french fries");
      $result = shell_exec('python ./input.py ' . escapeshellarg(json_encode($foods)));
      echo $result;
      

      Python:

      data = json.loads(sys.argv[1])
      for v in data:
         print(v)
      

      如果你传递 key:value

      PHP:

      $foods = array("food1":"pizza", "food2":""french fries");
      $result = shell_exec('python ./input.py ' . escapeshellarg(json_encode($foods)));
      echo $result;
      

      Python:

      data = json.loads(sys.argv[1])
      for(k,v) in content2.items():
         print("k+" => "+v)
      

      Python:

      data = json.loads(sys.argv[1])
      print(data['food1'])
      

      【讨论】:

        猜你喜欢
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        • 2013-11-08
        • 1970-01-01
        • 2011-07-26
        • 2017-04-04
        相关资源
        最近更新 更多