Facebook Graph API返回AdgroupPlacementSpecificReviewFeedback无法JSON序列化求解
解决方案
这个报错的核心原因是Facebook Marketing API SDK返回的AdgroupPlacementSpecificReviewFeedback是自定义类实例,不属于JSON可序列化的原生类型,你打印时看到的<AdgroupPlacementSpecificReviewFeedback>标识是类的__repr__方法输出的内容,并非接口返回的原始字符串内容,不需要用正则处理字符串,可直接通过以下更稳定的方法解决:
方法1:使用SDK内置的字典转换方法
绝大多数版本的Facebook Python Marketing SDK中,所有业务对象类都内置了递归转原生字典的方法,直接调用即可:# ad_review_feedback为你从接口获取的原始返回对象 review_feedback_dict = ad_review_feedback.export_all_data()该方法会自动将所有嵌套的自定义对象(包括
placement_specific下的特殊类实例)转换为Python原生dict,可直接用于JSON序列化。方法2:自定义JSON序列化规则
如果你使用的SDK版本没有内置转换方法,可以给json.dumps方法指定自定义序列化逻辑:import json from facebook_business.adobjects.adgroup_placement_specific_review_feedback import AdgroupPlacementSpecificReviewFeedback def custom_serializer(obj): if isinstance(obj, AdgroupPlacementSpecificReviewFeedback): # 提取对象内存储的原始数据 return getattr(obj, '_data', {}) # 其他类型走默认序列化逻辑 raise TypeError(f"Object of type {obj.__class__.__name__} is not serializable") # 序列化时传入自定义方法 result_json = json.dumps(your_api_response, default=custom_serializer)方法3:手动提取目标字段
如果你只需要placement_specific下的具体内容,不需要转换整个返回对象,可以直接提取实例的内置数据属性:placement_specific_data = ad_review_feedback['placement_specific']._data提取得到的就是包含facebook、instagram等平台审核反馈的原生字典,可直接使用。
注意:不建议使用正则处理字符串的方案,该方案需要先把对象转成字符串再做替换,遇到特殊转义字符、字段内容包含关键字时极易出错,稳定性远低于直接操作对象的方案。
内容的提问来源于stack exchange,提问作者FeBludger
相关产品推荐
相关产品推荐

