Python将json返回到PHP并使用json_decode

o4hqfura  于 2022-12-25  发布在  Python
关注(0)|答案(4)|浏览(173)

根据这个问题,Python通过过滤器在数组中查找值
这就是我所做的

data = {}

for result in results:
    if 'stackoverflow.com' in result['serp_url']:
        data['url'] = result['serp_url']
        data['rank'] = result['serp_rank']
        data['query'] = result['query']
        print(data)
        exit

这是PHP代码

$test = shell_exec("python3 py.py");
var_dump($test);

这是输出

/home/user/Desktop/pyphp/index.php:4:string '{'url': 'https://stackoverflow.com/', 'rank': 1, 'query': 'stackoverflow'}
{'url': 'https://www.quantcast.com/stackoverflow.com', 'rank': 36, 'query': 'stackoverflow'}
' (length=168)

当我使用json_decode($test)时,我得到null作为输出。
在PHP中使用Python的json或数组输出的最佳方式是什么?

ecr0jaav

ecr0jaav1#

谢谢大家的意见!根据这些,我想办法解决.
Python脚本

data = {}
for result in results:
    if 'stackoverflow.com' in result['serp_url']:
        data['url'] = result['serp_url']
        data['rank'] = result['serp_rank']
        data['query'] = result['query']
        print(json.dumps(data))
        exit

PHP脚本

exec("python3 py.py", $output);

$test = [];

foreach($output as $key => $out) {
    $test[$key] = json_decode($out, true);
    print_r("Rank: " . $test[$key]['rank'] ." - ". $test[$key]['url']."<br>");
}

产出

Rank: 1 - https://stackoverflow.com/
Rank: 36 - https://www.quantcast.com/stackoverflow.com
hgb9j2n6

hgb9j2n62#

你甚至不需要使用Python的Json包。这是一个小的tweek。用Python和PHP代码。

# Your py.py Looks Below: 
data = {}
data["aa"] = 100
# You can create any Valid Dictionary
print data

你的Php文件会有这样的代码

<?php
    $test = shell_exec("python py.py");
    echo json_decode(json_encode($test));
    // $test itself is a json String you even dont need encode/decode
?>

和结果在我的终端得到{'aa': 100}这是预期的,你想要的.
现在重要的一点是shell_exec命令将给予你从字典转换的字符串,幸运的是,该字符串本身是一个JSON,这就是json_decode返回NULL的原因。
以上两个Snippet工作正常。检查它们。

jdzmm42g

jdzmm42g3#

Python文件:

import json
import base64

j_data = {
"name": "wick",
"age": 24,
}

jso_en = json.dumps(j_data , indent=4)
#encode with base64
res_arr_bytes = jso_en.encode("ascii")  
base64_bytes = base64.b64encode(res_arr_bytes)
base64_enc = base64_bytes.decode("ascii")
print(base64_enc)

PHP文件:

$command = escapeshellcmd("python3 test.py");
$json_out = shell_exec($command);
$json_data = json_decode(base64_decode($json_out), true);
echo $json_data['name'];

php的输出:

wick
ac1kyiln

ac1kyiln4#

您正在生成的json无效(数组外部的自由对象和单引号之间的字符串)。
在你的python代码中,你应该在创建data对象时把它们附加到一个数组中。

import json

data = [] # use a list to keep your objects

for result in results:
    if 'stackoverflow.com' in result['serp_url']:
        record = {}
        record['url'] = result['serp_url']
        record['rank'] = result['serp_rank']
        record['query'] = result['query']
        data.append(record)
        # exit # <-- this doesn't seem correct, TBH
json.dumps(data)

相关问题