将JSON数据从PHP传递到Python脚本

时间:2016-07-28 03:02:32

标签: php python json

我希望能够将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脚本如下(如果我' echo'函数:

我得到这个值
'["pizza","french fries"]'

然后在Python脚本中:

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

这会将以下内容输出到浏览器:

["pizza", "french fries"]

这是一个普通的旧字符串,而不是列表。我的问题是,我怎样才能最好地将这些数据视为列表,或者我可以使用",#34;迭代的某种数据结构。作为分隔符?我真的不想将文本输出到浏览器,我只是希望能够将列表分解成碎片并将它们插入到文件系统的文本文件中。

4 个答案:

答案 0 :(得分:5)

有同样的问题

让我告诉你我做了什么

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已经提到的那样:)

它对我有用 干杯!

答案 1 :(得分:1)

您可以将base foods添加到字符串,然后将数据传递给Python并对其进行解码。例如:

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

答案 2 :(得分:0)

如果你有json字符串: data =' [" pizza","薯条"]' json.loads(data)不工作(它应该),然后你可以使用: MyPythonList = eval(data) eval 接受一个字符串并将其转换为python对象

答案 3 :(得分:0)

在将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)

ALSO

如果要传递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'])