【问题标题】:Convert JSON string of unicode characters to dict Python 3将 unicode 字符的 JSON 字符串转换为 dict Python 3
【发布时间】:2023-05-01 01:31:01
【问题描述】:

我正在尝试计算 JSON 数据中的 Unicode 字符数。我正在使用请求从提要中获取数据。

import requests

r = requests.get('https://venmo.com/api/v5/public?since=1438578858&until=1438578958')'
j_data = r.text

现在,我需要将 j_data 转换为字典以单独获取 message 项目。如果我只使用json.loads(j_data),我会得到UnicodeEncodeError: 'charmap' codec can't encode character

因此,我正在编码j_data,然后尝试使用loads 转换为dict。我收到此错误

TypeError: the JSON object must be str, not 'bytes'

如何解决这个问题?

代码:

import requests
import json

r = requests.get('https://venmo.com/api/v5/public?since=1438578858&until=1438578958')

j_data = r.text

encoded = j_data.encode()

b = json.loads(encoded)
print(b)

【问题讨论】:

  • 你不能只使用响应对象的json属性(r)而不是自己解码吗‽

标签: python json python-3.x dictionary unicode


【解决方案1】:

它似乎在 Python 2.7.6 中运行良好

import requests
import json

req = requests.get('https://venmo.com/api/v5/public?since=1438578858&until=1438578958')
contentJ = json.loads(req.content)

我得到一个名为 contentJ 的字典

【讨论】:

    【解决方案2】:

    在我看来,您尝试编码一些不需要编码的东西。使用编码剥离行,在 Python3.4 中一切正常。

    import requests
    import json
    
    r = requests.get('https://venmo.com/api/v5/public?since=1438578858&until=1438578958')
    
    j_data = r.text
    
    b = json.loads(j_data)
    print(type(b))
    

    【讨论】:

      【解决方案3】:

      要获取 json,请使用 r.json():

      import requests # $ pip install requests
      
      r = requests.get(url)
      data = r.json()
      

      您的错误:UnicodeEncodeError: 'charmap' codec can't encode character. 与 json 解析无关。当您尝试将 Unicode 打印到 Windows 控制台时,很可能会发生这种情况。配置可以显示所需字符的控制台字体并安装win-unicode-console包:

      T:\> py -mpip install win-unicode-console
      T:\> py -mrun your_script_that_prints_unicode.py
      

      What's the deal with Python 3.4, Unicode, different languages and Windows?

      【讨论】:

        最近更新 更多