如何在python中处理JSON对象上的Unicode错误?

时间:2019-04-24 21:54:34

标签: python json unicode python-unicode try-except

当我调用twitter API时,它会给我一个JSON字符串的tweets

例如示例


data = {“ created_at”:“ Mon Apr 22 22:45:05 +0000 2019”,“ text”:“刚刚确认!Mark Derdzinski,数据科学家@dexcom加入了我们的数据科学小组! ,Mark st \ u2026 https://t.co/sPNgvMvx9t","extended_tweet":{"full_text“:”刚刚确认!Mark Derdzinski,数据科学家@dexcom正在加入我们的数据科学小组!病人,商业和设备数据,以产生可操作的业务见解并改善患者结果。#dexcom #datascienceday #techsandiego #ucsd https://t.co/89ktI7jKI3“,” display_text_range“:[0,276]}


当我检查显示为str的类型时。 解析我使用

转换为dict
a = json.loads(data)

由此,我试图解析[“ extended_text”] [“ full_text”]以获取完整的推文

但是我得到了UnicodeError,因此在查看了几个线程之后,我发现我必须对字符串进行编码并使用以下代码

y = y['extended_tweet']['full_text'].encode(encoding='UTF-8')

但是当我尝试打印(y)如果full_tweet包含链接时,它不是干净的,并且按原样显示。

所以我打算用下面的代码(在网上以及#begineerlife都可以找到)清理推文

URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)

我收到类型错误

TypeError: can't use a string pattern on a bytes-like object

请帮助我解决问题,我不确定如何解析干净的推文。

完整代码如下

def on_data(self, data):
        y = json.loads(data)

        try:
            y = y['extended_tweet']['full_text'].encode(encoding='UTF-8')
            print(type(y))
            URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)
            print(URLless_string)
        except KeyError:
            y = y['text'].encode(encoding='UTF-8')
            print(type(y))
            URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)
            print(URLless_string)

之所以使用try and Expect方法是因为 有些推文没有Full_tweets,所以我只需要依靠dict对象上的[“ text”]键即可。

如果您可以帮助我完善对代码也有很大帮助的代码。

谢谢。

0 个答案:

没有答案