首页 > 解决方案 > 无法在 PHP 中解码来自 Python 的 JSON 字符串

问题描述

我有以下 Python 代码:

array_to_return = dict()
response_json_object = json.loads(responsestring)

for section in response_json_object:
    if section["requestMethod"] == "getPlayerResources":
        array_to_return["resource_list"] = json.dumps(section["responseData"]["resources"])
        break
array_to_return["requests_duration"] = time.time() - requests_start_time
array_to_return["python_duration"] = time.time() - python_start_time

它将以下内容返回到 PHP 脚本中:

{'resource_list': '{"aaa": 120, "bbb": 20, "ccc": 2138, "ddd": 8}', 'requests_duration': '7.30', 'python_duration': 41.0}

然后我试图解码这个字符串并将其转换为在 PHP 中可用的东西。我的代码如下:

$cmd = "$python $pyscript";
exec("$cmd", $output);

echo 'output: ';
var_dump($output[0]);

$json_output = json_decode($output[0], true);

echo 'json_output: ';
var_dump($json_output, json_last_error_msg());

$output[0]是一个字符串,但json_last_error_msg()返回Syntax Error

我很清楚我的字符串不是有效的 Json 字符串,但是如何正确转换它(在 Python 或 PHP 中)?我可能在我的 Python 脚本中做错了什么......

更新 1:

我实际上发现这responsestring是一个有效的 JSON 字符串(带双引号),但json.loads将双引号切换为单引号;因此response_json_object有单引号。

如果我用 注释掉该行json.loads,我会收到一个错误:

TypeError: 'int' object is not subscriptable

更新 2:

我设法通过删除 Python 中的关联列表来解决它,这并不完全是我所希望的,但这目前有效......

array_to_return = json.dumps(section["responseData"]["resources"])
#No longer using the following
#array_to_return["requests_duration"] = time.time() - requests_start_time
#array_to_return["python_duration"] = time.time() - python_start_time

如果建议使用关联列表的可行解决方案,我将接受该解决方案。

标签: pythonphpjson

解决方案


'字符不是 JSON 的合法字符,它必须是".

你的 json 应该是这样的。

{
    "resource_list": "{\"aaa\": 120, \"bbb\": 20, \"ccc\": 2138, \"ddd\": 8}",
    "requests_duration": "7.30",
    "python_duration": 41.0
}

推荐阅读