【问题标题】:pprint dictionary returned as unicodepprint 字典以 unicode 形式返回
【发布时间】:2018-08-17 16:34:37
【问题描述】:

我正在使用requests 模块。而且,返回的数据是包含来自服务器的响应(字典)的 unicode。有没有办法漂亮地打印 unicode 字典?

返回的响应如下所示:

u'<<200:{"id":"12345","key_x":"41341e2277422","name":"xyz","key_y":"000566b8-1f52-5b38c","marked_for_removal":false,"max_capacity":3831609642556,"total_capacity":0,"total_reserved_capacity":0}'

或者这个:

u'>>GET https://x.x.x.x:8888/services/rest/abc : {'headers': {'content-type': 'application/json;charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01'}, 'params': {}, 'timeout': 30, 'verify': False}'

我想按以下方式打印:

u'<<200:
{"id":"12345",
"key_x":"41341e2277422",
"name":"xyz",
"key_y":"000566b8-1f52-5b38c",
"marked_for_removal":false,
"max_capacity":3831609642556,
"total_capacity":0,
"total_reserved_capacity":0}'

即介于两者之间的 json 应该被格式化并且字符串可以保持原样。

我已经尝试将数据转换为字符串并打印出来,但这不起作用。

import pprint
pprint.pprint(data.encode('utf-8'), width=1)

【问题讨论】:

  • pprint.pprint(response.json()) 会起作用吗?
  • pprint 用于漂亮地打印 python 数据结构(如字典)
  • @Bemmu,最有可能的内容类型不是application/json
  • 好的,pprint.pprint(json.loads(response.content)) 怎么样?我只是从这里阅读文档:docs.python-requests.org/en/master/api/#requests.Response
  • response.content 会给你字节,这不是你想要的,因为这是文本数据。

标签: python python-2.7 pretty-print pprint


【解决方案1】:

response 属于 str 类型 - 包含 HTTP 状态代码和实际 JSON 数据结构。

import json
import pprint

# response is coming from requests, most likely Content-Type: text/plain 
# separate the status code '200' from the actual JSON data
status = response[:6]
data   = response[6:]

if '200' not in status:
   # Bail out, got an error
   exit(0)

parsed = json.loads(data.encode('utf-8'))

# Print output
print status
# Using pprint
pprint.pprint(parsed)

【讨论】:

  • 问题中的响应看起来并不完全像有效的 json(有前导 '&lt;&lt;200:
  • @avigil,很可能是 HTTP 状态码。 200 OK,会更新
  • 愤怒的人 :'(
  • 投反对票可能是因为response.split(':') 是一个包含太多值的列表,并且抛出太多值来解包错误
  • 但是,您的回答是针对一个非常特殊的情况。响应可以是一个巨大的字符串,也可以是介于两者之间的 json。例如。 u'&gt;&gt;GET https://x.x.x.x:8888/services/rest/abc : {'headers': {'content-type': 'application/json;charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01'}, 'params': {}, 'timeout': 30, 'verify': False}'
猜你喜欢
  • 2013-12-08
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多