用python处理JSON文件

用python处理JSON文件,python,json,dictionary,Python,Json,Dictionary,我正在为sublime文本开发一个插件,我在处理json文件时遇到了一些问题 这是json文件 A这就是我加载它的方式 输出显示了这个错误 但是当我尝试使用数据[0]时,我从json文件中得到一个字符 我知道我在解析和编码方面做错了什么,但我不知道在哪里。我整天都在读以前的文章,试图找出正确的方法 我非常感谢您的帮助。使用for-each循环遍历JSON对象将为您提供JSON对象中的一个键。 因此,在循环中,数据将引用字符串“desktop”本身和对象中的其他键,因此当您尝试执行数据[“desk

我正在为sublime文本开发一个插件,我在处理json文件时遇到了一些问题

这是json文件

A这就是我加载它的方式

输出显示了这个错误

但是当我尝试使用数据[0]时,我从json文件中得到一个字符

我知道我在解析和编码方面做错了什么,但我不知道在哪里。我整天都在读以前的文章,试图找出正确的方法


我非常感谢您的帮助。

使用for-each循环遍历JSON对象将为您提供JSON对象中的一个键。 因此,在循环中,数据将引用字符串“desktop”本身和对象中的其他键,因此当您尝试执行数据[“desktop”]时,实际上是在尝试获取字符串的索引,但由于字符串索引必须是数字,因此失败


要从文件中打印“desktop”键,只需编写printdatas['desktop']

即可,使用for-each循环遍历JSON对象将为您提供JSON对象中的键。 因此,在循环中,数据将引用字符串“desktop”本身和对象中的其他键,因此当您尝试执行数据[“desktop”]时,实际上是在尝试获取字符串的索引,但由于字符串索引必须是数字,因此失败

要打印文件中的“desktop”键,您只需编写printdatas['desktop']

尝试printtypedatas,您将看到它的外部dict。枚举dict会枚举它的键,这些键是字符串。数据是一个字符串,数据['desktop']失败也就不足为奇了。许多问题都可以用几张摆放得很好的照片来回答

试试PrintTypeData,你会看到它是外部的dict。枚举dict会枚举它的键,这些键是字符串。数据是一个字符串,数据['desktop']失败也就不足为奇了。许多问题都可以用几张摆放得很好的照片来回答

试试这个:

for k, v in datas.iteritems():
   # your stuff
试试这个:

for k, v in datas.iteritems():
   # your stuff

在字典中循环会将键作为字符串提供给您。您可能想要的是:

for key, value in datas.items()
    print(key, value)

在字典中循环会将键作为字符串提供给您。您可能想要的是:

for key, value in datas.items()
    print(key, value)
我的案子

data = res.read() //<<--HTTP DATA
resDic = json.loads(data.decode())
if resDic["code"] == 1000:
    //some thing
尝试数据。解码我的案例

data = res.read() //<<--HTTP DATA
resDic = json.loads(data.decode())
if resDic["code"] == 1000:
    //some thing

请尝试数据解码。首先,您需要了解这不是一个JSON数组。这是一个json对象-

{
   "desktop":{
      "name":"build",
      "upload":{
         "maximum":512,
      },
      "load":{
         "core":"i7",
      }
   },
   "table":{
      "name":"clean",
      "upload":{
         "maximum":1024,
      },
      "load":{
         "core":"i3",
      }
   }
}
那么代码呢-

for data in datas:
    print(data['desktop'])
不是遍历数组项,而是遍历该对象数据的属性/属性。 因此,这样做会使您的项目已经-

for data in datas:
    print(datas[data])
但是如果你想操纵并找到每个属性,你可以这样检查-

for data in datas:
    print(data)
    print(datas[data])

    if data == 'desktop':
        print('do somthing')
if type(datas) is list:
    # datas is list do whatever you like
else:
    # datas is obj
以下是它的在线视图-

编辑

如果数据可以是数组或对象,可以这样检查-

for data in datas:
    print(data)
    print(datas[data])

    if data == 'desktop':
        print('do somthing')
if type(datas) is list:
    # datas is list do whatever you like
else:
    # datas is obj

首先,您需要了解这不是一个JSON数组。这是一个json对象-

{
   "desktop":{
      "name":"build",
      "upload":{
         "maximum":512,
      },
      "load":{
         "core":"i7",
      }
   },
   "table":{
      "name":"clean",
      "upload":{
         "maximum":1024,
      },
      "load":{
         "core":"i3",
      }
   }
}
那么代码呢-

for data in datas:
    print(data['desktop'])
不是遍历数组项,而是遍历该对象数据的属性/属性。 因此,这样做会使您的项目已经-

for data in datas:
    print(datas[data])
但是如果你想操纵并找到每个属性,你可以这样检查-

for data in datas:
    print(data)
    print(datas[data])

    if data == 'desktop':
        print('do somthing')
if type(datas) is list:
    # datas is list do whatever you like
else:
    # datas is obj
以下是它的在线视图-

编辑

如果数据可以是数组或对象,可以这样检查-

for data in datas:
    print(data)
    print(datas[data])

    if data == 'desktop':
        print('do somthing')
if type(datas) is list:
    # datas is list do whatever you like
else:
    # datas is obj
json时,其中一个属性不应为逗号


json当其中一个属性不应该是逗号时

不太正确。。。键可以是任何可散列对象,并且在枚举中没有转换为字符串。@tdelaney如果解析JSON,它将是一个字符串。我本可以更清楚地指出与此相关的问题。您的回答也有帮助,我没有标记为已回答,因为其他用户解释了我的错误,但也感谢您抽出时间。不太正确。。。键可以是任何可散列对象,并且在枚举中没有转换为字符串。@tdelaney如果解析JSON,它将是一个字符串。我本可以更清楚地指出与此相关的问题。您的回答也有帮助,我没有标记为已回答,因为其他用户解释了我做错了什么,但也感谢您的时间。问题并不存在。这不是问题的解决方案。正如@tdelaney所说的,问题不在于负载,但无论如何还是要感谢您的时间!问题不在负荷上。这不是问题的解决方案。正如@tdelaney所说的,问题不在于负载,但无论如何还是要感谢您的时间!感谢无脑编码员的解释对理解我做错了什么非常有用。我想我很困惑,因为我在处理一个Json数组,所以当我尝试使用它时,我忘记了区别?我知道for循环的方法,但我不知道是否有更简单的方法。检查注释,你可以检查它是否是数组。感谢无脑编码器的解释,这对理解我做错了什么非常有用。我想我很困惑,因为我正在处理一个Json数组,所以当我尝试使用它时,我忘记了区别
json数组中的ect?我知道for循环的方法,但我不知道是否有更简单的方法。检查注释,你可以检查它是否是数组。谢谢,Klaus D在第一个coment中发布了相同的内容,也很有帮助。谢谢,Klaus D在第一个coment中发布了相同的内容,这也是帮助的全部。谢谢@AdityaBalwani,当另一个用户评论时,我将其与Json数组混淆。谢谢@AdityaBalwani,当另一个用户评论时,我将其与Json数组混淆。