我有一个问题,我一直试图解决,但我还没有找到正确的方法。
我有大约60-70页的数据从api, json格式。我需要将它们转换为一个列表,并组合其中一个值。
数据格式如下:
{"success":true,otherData:0,neededData:[{moreData:0,data:1},{moreData:1,data:0}]}
就像我说的,我一次大约有60-70个。
我最后想要的是这样的一个列表:
[{moreData:0,data:1},{moreData:1,data:0}]
包含列表中的所有数据。
我怎样才能做到这一点?
如果您不断获得json字符串格式的响应在Python 3中。x伊什
import json
# global variable just for example
results = []
# assume you pass each successful request into this function
# @ param res : valid json string
def process_response(res):
global results
# loads returns a dict object
res_dict = json.loads(res)
results += res_dict.get('neededData', [])
这将工作,并继续使用所需数据中的项更新您的结果数组
一些测试:
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = []
>>> b = [1,2]
>>> a.append(3)
>>> a
[3]
>>> a += b
>>> a
[3, 1, 2]
>>> a += []
>>> a
[3, 1, 2] # no change
>>> a += [5,6]
>>> a
[3, 1, 2, 5, 6]
>>> jst = '{ "l": [{"a":1, "b":2}, {"a":3, "b": 4}], "v": "other"}'
>>> json.loads(jst)
{'l': [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}], 'v': 'other'}
>>> type(json.loads(jst))
<class 'dict'>
>>> json.loads(jst).get('l', [])
[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}]
从每个API响应中扩展结果列表。
all_data = []
for res in api_results:
all_data.extend(res.neededData)
如果您的原始数据看起来像这样:
dataset = {
"success":True,
"otherData":0,
"neededData":[
{"moreData":0,"data":1},
{"moreData":1,"data":0}
]
}
然后你就可以访问"需要的数据"了。用dataset['neededData']
,或者dataset.get('neededData', list())
,在需要的数据并不总是存在的情况下。至少,根据你原来的例子。
如果您有多个具有该形状数据的请求响应,您可以将它们聚合在一起,并按照以下行进行更多操作:
dataset = [item for itemlist in responses for item in itemlist.get("neededData", [])]
大致相当于:
dataset = []
for itemlist in responses:
for item in itemlist.get("neededData", []):
dataset.append(item)