上传HTML到Confluence时报TextIOWrapper不可JSON序列化错误如何解决
问题原因
你遇到的TypeError: Object of type 'TextIOWrapper' is not JSON serializable报错,本质是参数类型传递错误:
codecs.open("sample.html", 'r')返回的是文件流对象,不是HTML文本字符串confluence.create_page方法的页面内容参数要求传入字符串类型,底层发送请求时会将参数序列化为JSON,文件流对象不支持JSON序列化,因此触发报错- 额外注意:你代码中先执行了
print(f.read()),会将文件指针移动到文件末尾,就算后续尝试读取文件内容也会得到空字符串,需要避免重复读取文件流。
解决方案
不需要对HTML做特殊格式转换,Confluence的storage表示格式原生支持绝大多数HTML标签,只需要将HTML文件的内容读取为字符串后再传入create_page方法即可。
修正后完整代码
import yaml from atlassian import Confluence import urllib, mimetypes import requests import codecs,json confluence = Confluence( url='https://confluence.com', username='12344', password='abcd') #### 读取HTML文件为字符串 with codecs.open("sample.html", 'r', encoding='utf-8') as f: html_content = f.read() # 打印内容验证 print(html_content) # 从零创建页面 status = confluence.create_page( 'ABCD', #空间标识 'Report', #页面标题 html_content, #传入读取到的HTML字符串 parent_id=123456, #新页面所属父页面的pageid type='page', representation='storage', editor='v2' ) print(status)
额外注意事项
- 推荐用
with语句打开文件,执行完读取逻辑后会自动关闭文件句柄,避免资源泄漏 - 如果HTML中包含中文、特殊符号,读取文件时明确指定
encoding='utf-8'可以避免出现乱码问题 - 如果HTML包含Confluence不支持的特殊标签,可以提前用正则或者HTML解析库做清洗后再传入
内容的提问来源于stack exchange,提问作者Y2Jepic
相关产品推荐
相关产品推荐

