簡體   English   中英

PHP-> Python JSON問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM