使用 python json.dump(Array, outfile) 将数据转储到输出文件

Dumping data to outputfile with python json.dump(Array, outfile)

我正在尝试使用以下代码将数据 'scraped' 从站点写入 json 输出文件:

from bs4 import BeautifulSoup
import requests
import json

path = ["https://www.test.be?page=,https://www.test2.be?page="]

adresArr = []
for i in path:
    pagina = 0;
    for x in range(0, 4):
        url = i + str(pagina)
        response = requests.get(url, timeout=5)
        content = BeautifulSoup(response.content, "html.parser")
        for adres in content.findAll('tr', attrs={"class": "odd clickable-row"}):
            adresObject = {
                "postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8'),
                "naam": adres.find('td', attrs={"class": "views-field views-field-field-locatie-thoroughfare"}).text.encode('utf-8'),
                "plaats": adres.find('td', attrs={"class": "views-field views-field-field-locatie-locality"}).text.encode('utf-8')
            }
            adresArr.append(adresObject)


        for adres in content.findAll('tr', attrs={"class": "odd clickable-row active"}):
            adresObject = {
                "postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8'),
                "naam": adres.find('td', attrs={"class": "views-field views-field-field-locatie-thoroughfare"}).text.encode('utf-8'),
                "plaats": adres.find('td', attrs={"class": "views-field views-field-field-locatie-locality"}).text.encode('utf-8')
            }
            adresArr.append(adresObject)

            pagina = x

    with open('adresData.json', 'w') as outfile:
         json.dump(adresArr, outfile)

我收到以下[​​=23=]错误:字节类型的对象不是json可序列化

如果我打印数组本身,它看起来没问题。但我一直坚持将它写入 json 文件。 我做错了什么?

这是我第一次在 python 中编码(并没有很多编码经验)所以请让你的答案清楚易懂:)

提前致谢

要解决此问题...您只需转换元素的数据类型 这是先前回答过的相同问题的参考

TypeError: Object of type 'bytes' is not JSON serializable

这可能会有所帮助

在这样的行中:

"postcode": adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.encode('utf-8')

.text 结果应该已经是一个字符串; .encode('utf-8') 使其成为 json 库抱怨的 bytes 对象。所以把它关掉:adres.find('td', attrs={"class": "views-field views-field-field-locatie-postal-code"}).text.

背景信息:字节是信息的原始单位;字符串是我们表示文本的方式。我们en编码一个字符串来生成用于存储的字节;我们 de 编码字节以获取字符串。但是 JSON 已经设计为可以处理字符串 - 库将在实际写入磁盘时为您处理文件编码。