在python中使用json.loads和php json_encode的输出

时间:2014-02-17 15:59:06

标签: php python json

在我的php脚本中,我运行了以下

//PHP script to send json data to python
$t = new test();
$t->testname1 = $testname;
$t->jmx1=$jmx;
#$jsondata=json_encode($t);
$output=shell_exec('python /var/www/metro/run.py' . escapeshellarg(json_encode($jsondata)) );

json输出示例如下

"{"testname1":"fairul","jmx1":"1562638904.jmx"}"

我想从上面的参数argv1中使用json.loads,以便在python中访问它。

import sys, json

# Load the data that PHP sent us
try:
   data = json.loads(sys.argv[1])   
except:
   result = data['testname1']

# Send it to stdout (to PHP)
print json.dumps(result)

不确定为什么我只能获得NULL输出

1 个答案:

答案 0 :(得分:1)

您对数据进行了两次编码;只编码一次:

$t->jmx1=$jmx;
$jsondata=json_encode($t);
$output=shell_exec('python /var/www/metro/run.py ' . escapeshellarg($jsondata) );

在Python中,删除已消隐的except处理程序,并移动异常处理程序的result 设置。在这里,我将其移至try,在IndexError不存在的情况下捕获sys.argv[1],在错误的JSON字符串引发ValueErrorTypeError当试图索引不是字典的东西或者为丢失的密钥抛出的KeyError时:

import sys, json

# Load the data that PHP sent us
try:
     data = json.loads(sys.argv[1])   
     result = data['testname1']
except (ValueError, TypeError, IndexError, KeyError) as e:
     print json.dumps({'error': str(e)})
     sys.exit(1)

print json.dumps(result)