[英]PHP->Python JSON issue
我究竟做錯了什么? Python3:
>>> import json
>>> s = "\"{'key': 'value'}\""
>>> obj = json.loads(s)
>>> obj['key']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string indices must be integers
給定的JSON字符串由php的json_encode()
生成
實際字符串:
{sessionid:5,file:\\/home\\/lol\\/folder\\/folder\\/file.ttt}
。
更新 :問題是因為我將json字符串作為命令行傳輸到php中的shell_exec
,並使用sys.argv[1]
讀取了它,所以shell刪除了引號。
PHP代碼(通過shell_exec
運行python腳本)
$arg = json_encode(['sessionid' => $session->getId(), 'file' => $filename]);
shell_exec('python3 script.py ' . $arg);
Python代碼:
import json, sys
s = json.loads(sys.argv[1]) #fails already
看一下這個JSON:
"\"{'key': 'value'}\""
您有一個包含轉義引號的字符串,后跟一個類似字典的對象,然后是一個轉義引號。 當您嘗試對此進行解碼時,將顯示以下內容:
"{'key': 'value'}"
那是一個字符串,而不是字典。
Kasra的答案是正確的, ast
可以解決問題,但是,另外,我不得不用php“修復”我的字符串-防止“損壞”(通過shell?):
php代碼:
$cmd = json_encode(['sessionid' => $session->getId(), 'file' => $filename]);
$cmd = str_replace('"', '\'', $cmd);
$cmd = str_replace('\\/', '/', $cmd);
$cmd = 'python3 program.py "' . $cmd . '"';
exec($cmd);
python代碼:
import json, sys, ast
task = json.loads("\"" + sys.argv[1] + "\"")
task = ast.literal_eval(task)
sessionid = task['sessionid'] # DONE!:)
由於您的字符串被2個引號引起來,因此您轉義了其中的一個,因此在使用json
讀取字符串后,結果將是字符串,因此之后,您可以使用ast.literal_eval
將您的字符串轉換為dictionary:
>>> obj = json.loads(s)
>>> obj
"{'key': 'value'}"
>>> import ast
>>> new=ast.literal_eval(obj)
>>> new['key']
'value'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.