欢迎来到 Stack Overflow!
您的格式在语法上不正确。您还应该(根据规则)提供您迄今为止尝试过的示例。你是新人,所以你获得了通行证,但请记住它以备将来使用 =)
你问的不是很清楚。这似乎是两个问题 - 1. 如何访问和捕获数据结构中的数据,2. 如何将捕获的数据写入 csv。
回答第一部分(访问和捕获数据):
你有列表和字典。要访问列表中的值,您可以使用您后面的值的索引号(从 0 开始作为第一个索引号)。
例如如果我有列表l = ['zero', 'one', 'two'],我可以通过l[1] 访问字符串'one',其中1 是列表l 中'one' 的索引号。
要访问字典中的内容,您可以使用它的键。
例如。 d = {'key': 'value'}
使用d['key']获取对应的值-'value'
所以假设你的数据实际上是这样的:
my_json = [
{
"object":[
{
"value1":1,
"value2":1,
"value3":1,
"value4":"code",
"value5":1,
"value6":"name"
},
{
"value1":1,
"value2":1,
"value3":1,
"value4":"code",
"value5":1,
"value6":"name"
}
],
"time":1550666169274
}
]
您拥有的是一个包含字典的列表; 'object' 键的值是列表,包含字典,而 'time' 键的值是字符串。
所以你可以像这样访问数据:
my_json[0]
>>> {'object': [{'value1': 1, 'value2': 1, 'value3': 1, 'value4': 'code', 'value5': 1, 'value6': 'name'}, {'value1': 1, 'value2': 1, 'value3': 1, 'value4': 'code', 'value5': 1, 'value6': 'name'}], 'time': 1550666169274}
或者,如果您的列表中有多个对象,您可以像这样迭代对象列表,这样很有用):
for i in range(len(my_json)):
my_json[i]
>>> {'object': [{'value1': 1, 'value2': 1, 'value3': 1, 'value4': 'code', 'value5': 1, 'value6': 'name'}, {'value1': 1, 'value2': 1, 'value3': 1, 'value4': 'code', 'value5': 1, 'value6': 'name'}], 'time': 1550666169274}
my_json[0] 是一个字典 - 因此您可以像这样访问它的值(字典列表):
my_json[0]['object']
>>> [{'value1': 1, 'value2': 1, 'value3': 1, 'value4': 'code', 'value5': 1, 'value6': 'name'}, {'value1': 1, 'value2': 1, 'value3': 1, 'value4': 'code', 'value5': 1, 'value6': 'name'}]
my_json[0]['time']
>>> 1550666169274
这是一个列表,所以再次使用索引:
my_json[0]['object'][0] # or iterate through the list of objects as above
>>> {'value1': 1, 'value2': 1, 'value3': 1, 'value4': 'code', 'value5': 1, 'value6': 'name'}
给你一本字典,所以用它是关键:
my_json[0]['object'][0]['value2']
>>> 1
等等……
由于“每个文档的内部对象的数量可以从 1 到 4 个对象不等”,因此您确实希望遍历“对象”包含的字典列表。你可以这样做:
all_docs = [] # create an empty list to hold further captured data
for obj in range(len(my_json)): # for each 'thing' in this list
obj_time = my_json[obj]['time'] # grab the time
values_sought = [] # create an empty list to hold further captured data
for dictionary in my_json[obj]['object']: # for each 'thing' in the 'object''s list
val_2 = dictionary['value2'] # grab the necessary values
val_4 = dictionary['value4']
values_sought.append((val_2, val_4)) # append them to the empty list above
print(obj_time, values_sought)
>>> 1550666169274 [(1, 'code'), (1, 'code')]
all_docs.append((obj_time, values_sought)) # append each document's data to the all_docs list
print(all_docs)
>>> [(1550666169274, [(1, 'code'), (1, 'code')])]
假设您有两个文档(在顶层),all_docs 看起来像这样:
[(1550666169274, [(1, 'code'), (1, 'code')])
(1550666169275, [(1, 'code'), (1, 'code')]),]
现在你可以像这样遍历这个列表和元组:
document_1 = all_docs[0]
document_1_data_all = all_docs[1]
document_1_data_1 = all_docs[1][0] # (or iterate)
document_2 = all_docs[1]
...等
对于第二部分,写入 csv,这取决于您希望它的格式。我建议你看看 python 的内置 csv module。
希望有帮助