Python for loop json.loads错误字符串索引必须为整数

Python for loop json.loads错误字符串索引必须为整数,python,json,Python,Json,我一直在努力理解以下Json解析问题的原因,我尝试了许多组合来访问“val”项值,但我遇到了麻烦 我已经在“类似”Json样式的数据上成功地使用了下面的代码,但我不知道如何对下面的数据设计这种方法 我感激地接受了所有的建议 result = xmltodict.parse(my_read) result = result['REPORT']['REPORT_BODY'] result =json.dumps(result, indent=1) print(result) {

我一直在努力理解以下Json解析问题的原因,我尝试了许多组合来访问“val”项值,但我遇到了麻烦

我已经在“类似”Json样式的数据上成功地使用了下面的代码,但我不知道如何对下面的数据设计这种方法

我感激地接受了所有的建议

result = xmltodict.parse(my_read)
result = result['REPORT']['REPORT_BODY']
result =json.dumps(result, indent=1)

    print(result)

    {
 "PAGE": [
     {
      "D-ROW": [
       {
        "@num": "1",
        "type": "wew",
        "val": ".000"
       },
       {
        "@num": "2",
        "type": "wew",
        "val": ".000"
       }
      ]
     },
     {
      "D-ROW": [
       {
        "@num": "26",
        "type": "wew",
        "val": ".000"
       },
       {
        "@num": "27",
        "type": "wew",
        "val": ".000"
       },
       {
        "@num": "28",
        "type": "wew",
        "val": ".000"
    }
   ]
  }
 ]
}

for item in json.loads(json_data):
    print(item['PAGE']['D-ROW']['val']
错误字符串索引必须是整数

项['PAGE']包含列表,因此不能使用'D-ROW'对其进行索引。如果json加载的数据位于变量数据中,则可以使用:

for page in data['PAGE']:
    for drow in page['D-ROW']:
        print drow['val']
项['PAGE']包含一个列表,因此不能使用“D行”对其进行索引。如果json加载的数据位于变量数据中,则可以使用:

for page in data['PAGE']:
    for drow in page['D-ROW']:
        print drow['val']

您的JSON不应该在带有数字的值周围包含引号。例如,改变

"D-ROW": [
   {
    "@num": "1",
    "type": "wew",
    "val": ".000"
   },


您的JSON不应该在带有数字的值周围包含引号。例如,改变

"D-ROW": [
   {
    "@num": "1",
    "type": "wew",
    "val": ".000"
   },

D行键包含列表,而不是dict

你应该改变

print(item['PAGE']['D-ROW']['val']

在包含您的命令的列表上迭代

D行键包含列表,而不是dict

你应该改变

print(item['PAGE']['D-ROW']['val']


要遍历包含dict的列表,首先要注意的是,基于JSON结构,它是一个dict{PAGE:[…],…},因此当您在其上使用JSON.load时,您也会得到一个dict

在这个for循环中,项迭代器实际上引用了dict中的键

for item in json.loads(json_data):
    print(item['PAGE']['D-ROW']['val']
这里有一个更简单的例子,更容易理解

>>> for key in json.loads('{"a": "a-value", "b": "b-value"}'):
...     print(key)
...
a
b
错误字符串索引必须是整数

因此,您可以猜测循环中的项将引用键页,并且您无法使用['D-ROW']PAGE['D-ROW']为该字符串编制索引,这是没有意义的,因此会出现错误

for循环中的键/值 若使用下面的循环,要获取项,项将成为键、值的元组

也可以像这样展开键和值

>>> for key, value in json.loads('{"a": "a-value", "b": "b-value"}').items():
...     print("key is {} value is {}".format(key, value))
...
key is a value is a-value
key is b value is b-value

首先应该注意的是,基于JSON结构,它是一个dict{PAGE:[…],…},因此当您在它上使用JSON.loads时,您也会得到一个dict

在这个for循环中,项迭代器实际上引用了dict中的键

for item in json.loads(json_data):
    print(item['PAGE']['D-ROW']['val']
这里有一个更简单的例子,更容易理解

>>> for key in json.loads('{"a": "a-value", "b": "b-value"}'):
...     print(key)
...
a
b
错误字符串索引必须是整数

因此,您可以猜测循环中的项将引用键页,并且您无法使用['D-ROW']PAGE['D-ROW']为该字符串编制索引,这是没有意义的,因此会出现错误

for循环中的键/值 若使用下面的循环,要获取项,项将成为键、值的元组

也可以像这样展开键和值

>>> for key, value in json.loads('{"a": "a-value", "b": "b-value"}').items():
...     print("key is {} value is {}".format(key, value))
...
key is a value is a-value
key is b value is b-value