python-3.x - 在 Python 3.7 中序列化为 JSON 字符串 tracemalloc
问题描述
我必须将 .json 的结果序列化为 JSON 字符串tracemalloc
。
current_mem, peak_mem = tracemalloc.get_traced_memory()
overhead = tracemalloc.get_tracemalloc_memory()
stats = tracemalloc.take_snapshot().statistics('traceback')[:top]
summary = "traced memory: %d KiB peak: %d KiB overhead: %d KiB" % (
int(current_mem // 1024), int(peak_mem // 1024), int(overhead // 1024)
)
logging.info("%s", summary)
out_lines = [ summary ]
for trace in stats:
out_lines.append("---")
out_lines.append( "%d KiB in %d blocks" % (int(trace.size // 1024), int(trace.count)) )
logging.info("%s", out_lines)
out_lines.extend( trace.traceback.format() )
out_lines.append('')
data = {}
data['traceback'] = '\n'.join(out_lines).encode('utf-8')
res = json.dumps(data)
print(res)
当我将数据转储到 JSON 时,我得到一个
Object of type bytes is not JSON serializable
从日志中我可以看到字符串输出:
2020-01-08 11:54:25 - INFO - traced memory: 35 KiB peak: 91 KiB overhead: 31 KiB
2020-01-08 11:54:25 - INFO - ['traced memory: 35 KiB peak: 91 KiB overhead: 31 KiB', '---', '1 KiB in 4 blocks']
然后在循环中:
2020-01-08 11:54:26 - ERROR - ['traced memory: 35 KiB peak: 91 KiB overhead: 31 KiB', '---', '1 KiB in 4 blocks', ' File "/usr/local/lib/python3.7/site-packages/tornado/routing.py", line 256', ' self.delegate.finish()', ' File "/usr/local/lib/python3.7/site-packages/tornado/web.py", line 2195', ' self.execute()', ' File "/usr/local/lib/python3.7/site-packages/tornado/web.py", line 2228', ' **self.path_kwargs)', ' File "/usr/local/lib/python3.7/site-packages/tornado/gen.py", line 326', ' yielded = next(result)', ' File "/usr/local/lib/python3.7/site-packages/tornado/web.py", line 1590', ' result = method(*self.path_args, **self.path_kwargs)', ' File "/tornado/handlers/memTraceHandler.py", line 56', ' self.write(json.dumps(response.getData()))', '---', '0 KiB in 2 blocks']
那么哪个是b""
我无法序列化的字符串?
解决方案
您正在这里创建bytes
对象:
data['traceback'] = '\n'.join(out_lines).encode('utf-8')
这就是调用的encode
作用。
只需这样做:
data['traceback'] = '\n'.join(out_lines)
它会很好地倾倒。
推荐阅读
- c++ - 为什么在这个例子中委托中有 Qt::UserRole?
- c++ - 解除绑定后无法绑定套接字
- python - 使用 BeautifulSoup 解析 HTML,select()
- django - 验证没有值
- json - 无法在颤动中将 MAP 值发布到 https 帖子
- aws-cdk - 使用 aws-cdk-local 包和 Localstack 测试 Lambda 和 APIGateway
- android - 如何修复在 Xamarin.Android 中始终为零的 AlertDialog(全屏)内的 WebView 中的高度?
- java - 列表映射的过滤器映射
- spring-boot - 带有外部 Tomcat 的 Spring Boot WAR
- javascript - 如何在我的数据库中保存纬度、经度。使用传单地图