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

时间:2019-10-27 22:58:30

标签: python json

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 
 }
]

1 个答案:

答案 0 :(得分:1)

在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))