Python3 Socket发送JSON数据时双引号变单引号无法解析问题
解决Socket发送JSON时双引号变单引号的问题
问题出在你直接把Python字典和HTTP头字符串拼接:
response_request = "HTTP/1.1 200 OK\n\n" + response_data
Python会自动将字典转为repr()格式的字符串,这种格式用单引号表示字符串,不属于标准JSON格式,所以接收端拿到的是带单引号的内容,无法正常解析。
正确做法:用json.dumps()生成标准JSON字符串
先导入json模块,将字典转为符合JSON规范的双引号字符串,再和HTTP头拼接:
import json server_name = "One" response_data = {"error": "false", "data": "Success", "Server": server_name} # 将字典转为标准JSON字符串 json_data = json.dumps(response_data) response_request = "HTTP/1.1 200 OK\n\n" + json_data sock.send(response_request.encode()) sock.close()
为什么直接写死字符串有效?
你手动写的"""HTTP/1.1 200 OK\n\n{"error": "false", "data": "Success"}"""本身就是标准JSON格式的字符串,自带双引号,所以发送后不会出现问题,但这种方式无法动态插入变量。而json.dumps()既支持动态插入变量,又能保证输出的是标准JSON格式。
接收端验证
修改发送端后,接收端可以直接用response.json()解析数据:
response = requests.get("http://localhost/") print(response.text) # 输出带双引号的标准JSON print(response.json()) # 直接解析为Python字典
内容的提问来源于stack exchange,提问作者MrRage
相关产品推荐
相关产品推荐

