在python中加载json文件

时间:2016-06-27 13:31:16

标签: python json encoding

我有多个文件要加载为JSON,它们都以相同的方式格式化,但对于其中一个我无法加载它而不引发异常。您可以在此处找到该文件:

File

我做了以下代码:

def from_seed_data_extract_summoners():
   summonerIds = set()
   for i in range(1,11):
       file_name = 'data/matches%s.json' % i
       print file_name
       with open(file_name) as data_file:    
           data = json.load(data_file)
       for match in data['matches']:
           for summoner in match['participantIdentities']:
               summonerIds.add(summoner['player']['summonerId'])
   return summonerIds

执行以下操作时发生错误:json.load(data_file)。我想有一个特殊的角色,但我找不到它,也不知道如何更换它。生成的错误是:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xeb in position 6: invalid continuation byte

你知道我怎么能骑它吗?

4 个答案:

答案 0 :(得分:2)

  1. file_name = 'data/matches%s.json' % i替换为file_name =' data / matches%i.json' %i
  2. 正确的语法是data = json.load(file_name)而不是 -

    使用open(file_name)作为data_file:     data = json.load(data_file)

  3. 编辑:

    def from_seed_data_extract_summoners():
     summonerIds = set()   
       for i in range(1,11):
            file_name = 'data/matches%i.json' % i
            with open(file_path) as f:
                data = json.load(f, encoding='utf-8')
            for match in data['matches']:
                for summoner in match['participantIdentities']:
                    summonerIds.add(summoner['player']['summonerId'])    
        return summonerIds
    

答案 1 :(得分:2)

您的JSON正在尝试将数据强制为unicode,而不仅仅是一个简单的字符串。你有一些嵌入式角色(可能是一个空间或不太明显的东西),不能强制进入unicode。

How to get string objects instead of Unicode ones from JSON in Python?

这是一个关于在python中使JSON对象更易于管理的好主题。

答案 2 :(得分:1)

尝试:

json.loads(data_file.read(), encoding='utf-8')

答案 3 :(得分:1)

尝试:

json.loads(unicode(data_file.read(), errors='ignore'))

或:

json.loads(unidecode.unidecode(unicode(data_file.read(), errors='ignore')))

(对于第二个,您需要安装unidecode