当我使用JSON请求主体从python向我的API端点发送PUT请求时,我收到空的请求主体,因为有时它包含JSON不支持的特殊字符。
在发送请求之前如何清理JSON?
在发送请求之前,我已经尝试过stringify和解析json!
profile = json.loads(json.dumps(profile))
我的示例无效json是:
{
"url": "https://www.example.com/edmund-chand/",
"name": "Edmund Chand",
"current_location": "FrankfurtAmMainArea, Germany",
"education": [],
"skills": []
}
并且我期望的经过验证的json应该是:
{
"url": "https://www.example.com/edmund-chand/",
"name": "Edmund Chand",
"current_location": "Frankfurt Am Main Area, Germany",
"education": [],
"skills": []
}
答案 0 :(得分:1)
如果您正在寻找快速清理有限字段(即current_location)的json数据的方法,可以尝试以下类似操作:
def sanitize(profile):
profile['current_location'] = ', '.join([val.strip() for val in profile['current_location'].split(',')])
return profile
profile = sanitize(profile)
这里的想法是,您将编写代码以清理该函数中的每个位,然后将其发送给您的api或在无效等情况下抛出异常。
要获得更可靠的验证,可以考虑使用jsonschema
软件包。更多详细信息here。
使用该软件包,您可以更灵活地验证字符串和json模式。
示例摘自包装自述文件:
from jsonschema import validate
# A sample schema, like what we'd get from json.load()
schema = {
"type" : "object",
"properties" : {
"url" : {"type" : "string", "format":"uri"},
"current_location" : {"type" : "string", "maxLength":25, "pattern": "your_regex_pattern"},
},
}
# If no exception is raised by validate(), the instance is valid.
validate(instance=profile, schema=schema)
您可以找到关于字符串here的更多信息和可用的验证类型。
答案 1 :(得分:0)
谢谢@Rithin的解决方案,但似乎它与整个JSON的一个字段结合在一起。
我找到了一种解决方案,将其替换为适用于任何字段的以下示例代码:
profile = json.loads(json.dumps(profile).replace("\t", " "))