当前位置: 首页 > 面试题库 >

让JSON对象接受字节或让urlopen输出字符串

慕承允
2023-03-14
问题内容

使用Python 3,我需要从URL请求json文档。

response = urllib.request.urlopen(request)

response对象是带有readreadline方法的类似文件的对象。通常,可以使用在文本模式下打开的文件来创建JSON对象。

obj = json.load(fp)

我想做的是:

obj = json.load(response)

但是,此方法不起作用,因为urlopen以二进制模式返回文件对象。

解决方法当然是:

str_response = response.read().decode('utf-8')
obj = json.loads(str_response)

但这感觉不好…

有没有更好的方法可以将字节文件对象转换为字符串文件对象?还是我缺少任何一个参数urlopenjson.load给出编码?


问题答案:

HTTP发送字节。如果所讨论的资源是文本,则通常通过Content-Type HTTP标头或其他机制(RFC,HTML meta http- equiv等)指定字符编码。

urllib 应该 知道如何将字节编码为字符串,但这太幼稚了-这是一个功能强大且功能强大的非Pythonic库。

深入Python 3提供了有关情况的概述。

您的“解决方法”很好-尽管感觉不对,但这是正确的方法。



 类似资料:
  • 我正在为oldResource字段编写OpenAPI定义,它可以是对象(基本上是hashmap)或字节数组。如下所示- 如何在OpenAPI中定义这样的字段? 我尝试了以下方法 但是,这给了我一个错误。 如何修复此问题?

  • 我想解析一些JSON,但一个键要么是字符串,要么是对象。 这是我当前的结构:https://github.com/PhillippOhlandt/pmtoapib/blob/master/CollectionItemRequest.go#L10 在这里,“Url”属性不仅可以是字符串,还可以是对象。 我开始为它创建一个自己的结构,覆盖对象案例。 但是这样字符串版本就不行了。有没有一种方法既能处理这

  • 我有一个不寻常的问题,有些东西工作得有点太好了。我已经写了一个开关,它只允许用户以数字的形式输入,在书写过程中在适当的位置添加破折号。在中可以看到这样的日期:“2016-05-01”。问题是并非总是由用户填写,有时必须由程序设置。但当我使用code setText(“2016-05-01”)时,它不能正确显示,所有的破折号都消失了。如何让它工作?我试图更改以允许dash,但这就是为什么在许多其他地

  • 我已经读了很多关于这个错误的帖子,但我仍然无法理解。当我尝试循环遍历我的函数时: 以下是错误:

  • 本文向大家介绍详解SpringMVC @RequestBody接收Json对象字符串,包括了详解SpringMVC @RequestBody接收Json对象字符串的使用技巧和注意事项,需要的朋友参考一下 页面提交请求参数有两种,一种是form格式提交,一种json格式提交 通常情况下我们使用的都是form格式提交的数据,数据格式:k=v&k=v,这个时候用springMVC接收参数没有问题,但有时

  • 当我尝试对输入进行限制时,我在java中遇到了很多麻烦。在此示例中,我需要字符串代码仅接受和等符号。我如何检查以确保没有数字、字母或其他符号?谢谢