Python JSON循环只返回最后一条记录

2024-09-28 21:19:59 发布

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

Python解析JSON文件,它是一个带有嵌入式字典的列表 我可以从中得到值,但只能得到字典中最后一条记录的值

代码附在我试过的东西上

import json

access_json = open('shortdocuments.json', 'r')
read_content = json.load(access_json)
# Make list a dictionary
for question_access in read_content:
    print(type(question_access))

replies_access = question_access['Attachment']


for i in replies_access:
    print(i,"|",replies_access[i])

想把所有的唱片都这样放出来

CreateDate | 2019-10-16T09:13:33

Description |
CreateUserID | 1

Path | 201910\10489_AParker_T0231056_13.pdf

Name | 10489_AParker_T0231056_13
FileID | 765

IsDepotUsed | True

Extension | .pdf

UpdateDate | 2019-10-16T09:13:33

UpdateUserID | 1

我的JSON文件

[
  {
    "UserDefinedValueID": 872,
    "UserDefinedFieldID": 56,
    "ParentID": 355,
    "Name": "PDM_Application",
    "Value": "763",
    "UpdateDate": "2019-10-27T14:29:18",
    "FieldType": "File",
    "Attachment": {
      "FileID": 763,
      "Name": "03981-00117",
      "Description": "",
      "IsDepotUsed": true,
      "Path": "201910\\03981-00117.pdf",
      "Extension": ".pdf",
      "CreateDate": "2019-10-16T09:13:32",
      "UpdateDate": "2019-10-27T14:29:18",
      "CreateUserID": 1,
      "UpdateUserID": 1
    },
    "UpdateUserID": 1,
    "CreateUserID": 1  },
  {
    "UserDefinedValueID": 873,
    "UserDefinedFieldID": 57,
    "ParentID": 355,
    "Name": "PDM_LeaseDoc",
    "Value": "764",
    "UpdateDate": "2019-10-16T09:13:33",
    "FieldType": "File",
    "Attachment": {
      "FileID": 764,
      "Name": "09658-00060_t0007192_Application",
      "Description": "",
      "IsDepotUsed": true,
      "Path": "201910\\09658-00060_t0007192_Application.pdf",
      "Extension": ".pdf",
      "CreateDate": "2019-10-16T09:13:33",
      "UpdateDate": "2019-10-16T09:13:33",
      "CreateUserID": 1,
      "UpdateUserID": 1
    },
    "UpdateUserID": 1,
    "CreateUserID": 1  },
  {
    "UserDefinedValueID": 875,
    "UserDefinedFieldID": 59,
    "ParentID": 355,
    "Name": "PDM_FAS/SODA",
    "Value": "765",
    "UpdateDate": "2019-10-16T09:13:33",
    "FieldType": "File",
    "Attachment": {
      "FileID": 765,
      "Name": "10489_AParker_T0231056_13",
      "Description": "",
      "IsDepotUsed": true,
      "Path": "201910\\10489_AParker_T0231056_13.pdf",
      "Extension": ".pdf",
      "CreateDate": "2019-10-16T09:13:33",
      "UpdateDate": "2019-10-16T09:13:33",
      "CreateUserID": 1,
      "UpdateUserID": 1
    },
    "UpdateUserID": 1,
    "CreateUserID": 1 
 }
]

Tags: pathnamejsonattachmentaccesspdfdescriptioncreatedate
1条回答
网友
1楼 · 发布于 2024-09-28 21:19:59

在for循环之后,您使用的变量仍在作用域中。你知道吗

for question_access in read_content:
    print(type(question_access))

# question_access is still in scope, and the last item in the list
replies_access = question_access['Attachment']

您需要在循环下缩进代码,以便对每个项执行操作

for question_access in read_content:
    replies_access = question_access['Attachment']
    for i in replies_access:
        print(i,"|",replies_access[i])

编辑:如果你想要一个CSV类型的格式,你可以试试这个

import json

with open('shortdocuments.json') as f:
    data = json.load(f)

if data:
    i = iter(data)
    a = next(i)['Attachment']
    print('|'.join(a.keys()))  # comment line to get only values
    while True:
        try:
            print('|'.join(map(str, a.values())))
            a = next(i)['Attachment']
        except StopIteration:
            break

输出

CreateDate|CreateUserID|Description|Extension|FileID|IsDepotUsed|Name|Path|UpdateDate|UpdateUserID
2019-10-16T09:13:32|1||.pdf|763|True|03981-00117|201910\03981-00117.pdf|2019-10-27T14:29:18|1
2019-10-16T09:13:33|1||.pdf|764|True|09658-00060_t0007192_Application|201910\09658-00060_t0007192_Application.pdf|2019-10-16T09:13:33|1
2019-10-16T09:13:33|1||.pdf|765|True|10489_AParker_T0231056_13|201910\10489_AParker_T0231056_13.pdf|2019-10-16T09:13:33|1

或者用熊猫

import json
from pandas import DataFrame

with open('shortdocuments.json') as f:
    data = json.load(f)
    attachments = [d['Attachment'] for d in data]
    print(DataFrame.from_dict(attachments).to_csv(sep='|', index=False))

相关问题 更多 >