json数据处理中出现错误“字符串索引必须是整数”

2024-09-28 22:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想按键读取数据,但下面的错误是有问题的

    print(data[0]['user_id'])
TypeError: string indices must be integers

我的代码:

with open("AccInformation.json") as file:
    data = json.loads(file.read())
    print(data[0]['user_id'])

我的示例json文件:

[
    "{\"user_id\": 88387467586, \"firstName\": \"Murat\", \"lastName\": \"KO\\u00c7\", \"email\": \"vehbikoc@kocholding.com.tr\", \"username\": \"kocholding\", \"password\": \"123456789\", \"accountKEY\": \"Y29K-G6LF-MRDI-PT5S-BZ1Q-VA4N\", \"register_date\": \"Mon Aug 30 02:01:31 2021\"}",
    "{\"user_id\": 33233303603, \"firstName\": \"Sema\", \"lastName\": \"UZUN\", \"email\": \"sema12@gmail.com\", \"username\": \"semazen\", \"password\": \"123456789\", \"accountKEY\": \"ZW2G-7960-HPQA-5SKX-LTDJ-YBCE\", \"register_date\": \"Mon Aug 30 14:42:39 2021\"}",
    "{\"user_id\": 86519529854, \"firstName\": \"Sema\", \"lastName\": \"UZUN\", \"email\": \"sema12@gmail.com\", \"username\": \"semazen\", \"password\": \"123456789\", \"accountKEY\": \"79DG-BNAZ-4IV3-OCKE-H5PM-UJ0T\", \"register_date\": \"Mon Aug 30 15:42:37 2021\"}",
    "{\"user_id\": 51814237688, \"firstName\": \"Sema\", \"lastName\": \"UZUN\", \"email\": \"sema12@gmail.com\", \"username\": \"semazen\", \"password\": \"123456789\", \"accountKEY\": \"SLVG-F2C6-0QOB-5UJ1-AIHZ-78X4\", \"register_date\": \"Mon Aug 30 22:46:48 2021\"}"
]

我哪里做错了


Tags: comregisteridjsondatadateemailusername
3条回答

问题是AccInformation.json文件中有一个字符串列表,您试图访问字符串的键user_id,这是不可能的,因为字符串的索引是整数。您首先需要做的是json.loads(data[0]),这将把字符串反序列化为python对象,然后您可以访问键user_id

应该是这样的:

with open("AccInformation.json") as file:
    data = json.loads(file.read())
    account = json.loads(data[0])
    print(account["user_id"])

另一个提示:您可以将文件传递给json.load(),因此不需要调用file.read()

with open("AccInformation.json") as file:
    data = json.load(file)
    account = json.loads(data[0])
    print(account["user_id"])

有关json库和示例的更多信息:https://docs.python.org/3/library/json.html

这里有一个带有字符串列表的json。您需要再次解析它们或修复json

with open("AccInformation.json") as file:
   data = json.load(file)
   print(json.loads(data[0])['user_id'])

或者更好:

with open() as file:
   data = [json.loads(it) for it in json.load(file)]
   print(data[0]['user_id'])

[]语法称为列表理解。我建议您改为修复json

您的json文件格式错误,是否可以删除地图周围的“”,并删除地图键中的\转义“”,以代替:

[
    "{\"user_id\": 88387467586, \"firstName\": \"Murat\", \"lastName\": \"KO\\u00c7\", \"email\": \"vehbikoc@kocholding.com.tr\", \"username\": \"kocholding\", \"password\": \"123456789\", \"accountKEY\": \"Y29K-G6LF-MRDI-PT5S-BZ1Q-VA4N\", \"register_date\": \"Mon Aug 30 02:01:31 2021\"}",
    "{\"user_id\": 33233303603, \"firstName\": \"Sema\", \"lastName\": \"UZUN\", \"email\": \"sema12@gmail.com\", \"username\": \"semazen\", \"password\": \"123456789\", \"accountKEY\": \"ZW2G-7960-HPQA-5SKX-LTDJ-YBCE\", \"register_date\": \"Mon Aug 30 14:42:39 2021\"}",
    "{\"user_id\": 86519529854, \"firstName\": \"Sema\", \"lastName\": \"UZUN\", \"email\": \"sema12@gmail.com\", \"username\": \"semazen\", \"password\": \"123456789\", \"accountKEY\": \"79DG-BNAZ-4IV3-OCKE-H5PM-UJ0T\", \"register_date\": \"Mon Aug 30 15:42:37 2021\"}",
    "{\"user_id\": 51814237688, \"firstName\": \"Sema\", \"lastName\": \"UZUN\", \"email\": \"sema12@gmail.com\", \"username\": \"semazen\", \"password\": \"123456789\", \"accountKEY\": \"SLVG-F2C6-0QOB-5UJ1-AIHZ-78X4\", \"register_date\": \"Mon Aug 30 22:46:48 2021\"}"
]

应该是

[
    {"user_id": 88387467586, "firstName": "Murat", "lastName": "KOu00c7", "email": "vehbikoc@kocholding.com.tr", "username": "kocholding", "password": "123456789", "accountKEY": "Y29K-G6LF-MRDI-PT5S-BZ1Q-VA4N", "register_date": "Mon Aug 30 02:01:31 2021"},
    {"user_id": 33233303603, "firstName": "Sema", "lastName": "UZUN", "email": "sema12@gmail.com", "username": "semazen", "password": "123456789", "accountKEY": "ZW2G-7960-HPQA-5SKX-LTDJ-YBCE", "register_date": "Mon Aug 30 14:42:39 2021"},
    {"user_id": 86519529854, "firstName": "Sema", "lastName": "UZUN", "email": "sema12@gmail.com", "username": "semazen", "password": "123456789", "accountKEY": "79DG-BNAZ-4IV3-OCKE-H5PM-UJ0T", "register_date": "Mon Aug 30 15:42:37 2021"},
    {"user_id": 51814237688, "firstName": "Sema", "lastName": "UZUN", "email": "sema12@gmail.com", "username": "semazen", "password": "123456789", "accountKEY": "SLVG-F2C6-0QOB-5UJ1-AIHZ-78X4", "register_date": "Mon Aug 30 22:46:48 2021"}
]

然后它将正常工作,您可以按如下方式访问数据:

data[0]["user_id" or indeed data[0].user_id

相关问题 更多 >