2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果您總是以第二種格式檢索輸入數(shù)據(jù),您可以將其轉(zhuǎn)換為第一種格式,如下所示:
import itertools
flatten = itertools.chain.from_iterable
def transform(posts):
transformed = list(map(lambda post: post["data"], posts))
flat_posts = list(flatten(transformed))
return flat_posts
例子:
posts = [
{
"data":[{"id":237,"first_name":"LeBron","height_feet":6,"height_inches":8,"last_name":"James","position":"F",
"team":{"id":14,"abbreviation":"LAL","city":"Los Angeles","conference":"West","division":"Pacific","full_name":"Los Angeles Lakers","name":"Lakers"},"weight_pounds":250}],
"meta":{"total_pages":1,"current_page":1,"next_page":None,"per_page":25,"total_count":1}
}
]
print(transform(posts))
>>> [
{
'id': 237, 'first_name': 'LeBron', 'height_feet': 6, 'height_inches': 8, 'last_name': 'James', 'position': 'F',
'team': {'id': 14, 'abbreviation': 'LAL', 'city': 'Los Angeles', 'conference': 'West', 'division': 'Pacific', 'full_name': 'Los Angeles Lakers', 'name': 'Lakers'}, 'weight_pounds': 250
}
]

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
您需要的是posts在渲染模板之前過濾并展平第二個(gè) JSON。例如,你可以這樣做;
def fatten(json):
flatten_json = []
for node in json:
d = node["data"]
if d is not None:
for item in d:
flatten_json.append(item)
return flatten_json
或者更多Pythonic(但不那么可讀)的版本
def flatten(json):
return [item for node in json if node["data"] is not None for item in node["data"]]
然后將扁平化的 json 傳遞為
return render_template("spec_player.html", posts=fatten(posts))
這兩個(gè)函數(shù)都會(huì)迭代 posts JSON 并提取每個(gè)data節(jié)點(diǎn)中的子節(jié)點(diǎn)。
我認(rèn)為為這個(gè)簡(jiǎn)單的任務(wù)拉一個(gè)庫是不值得的。
添加回答
舉報(bào)