python - 无法在 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
如果建议使用关联列表的可行解决方案,我将接受该解决方案。
解决方案
该'
字符不是 JSON 的合法字符,它必须是"
.
你的 json 应该是这样的。
{
"resource_list": "{\"aaa\": 120, \"bbb\": 20, \"ccc\": 2138, \"ddd\": 8}",
"requests_duration": "7.30",
"python_duration": 41.0
}
推荐阅读
- angular - Ngx-charts 多系列折线图
- angular - 从 Springboot 到 Angular 的重定向问题
- nestjs - 在控制器上使用导入的拦截器在nestjs中不起作用
- websocket - 无法设置远程候选人 :-( (添加 1,预期 2)
- google-play - 在 Google Play 控制台的内部应用共享中上传 APK 但“找不到项目”
- jsonschema - Fastify 响应模式与 $merge-keyword 抛出 FST_ERR_SCH_BUILD
- python - h2o - AttributeError:类型对象“ModelBase”没有属性“hit_ratio_table”
- javascript - 如何以角度显示每小时的数据
- javascript - 使用数组中的值初始化 Vuex 参数
- amazon-web-services - AWS Windows EC2 实例未连接到互联网