OData Expand查询未返回预期扁平表,如何获取扁平结构数据?
OData查询返回嵌套结构的扁平化解决方案
OData的$expand本身就是按照规范返回嵌套关联对象的,原生查询无法直接输出你要的扁平表结构,你可以通过以下两种方式实现需求:
1. 后端支持的话用OData $apply语法(推荐,若服务支持)
如果你的OData服务支持OData v4.01及以上版本的$apply扩展,可以通过compute操作将嵌套字段投影为顶层字段,再用$select筛选:
https://myurl.com/odata/Reporting/v1/SupplierOfferRows?$apply=compute(Item_ID as Item/ID, Item_itemID as Item/itemID)&$select=ID,Item_ID,Item_itemID
注意:不是所有OData服务都开启了$apply功能,需要确认后端是否支持。
2. 客户端手动处理扁平化数据
如果后端不支持$apply,拿到返回的嵌套数据后,在客户端做字段映射即可。举两个常用语言的示例:
JavaScript示例:
// 假设返回的原始数据存在supplierOfferRows数组中 const flattenedTable = supplierOfferRows.map(row => ({ ID: row.ID, "Item.ID": row.Item?.ID, itemID: row.Item?.itemID }));
Python示例:
# 假设原始数据存储在supplier_offer_rows列表中 flattened_table = [ { "ID": row["ID"], "Item.ID": row["Item"].get("ID") if row.get("Item") else None, "itemID": row["Item"].get("itemID") if row.get("Item") else None } for row in supplier_offer_rows ]
内容的提问来源于stack exchange,提问作者Frederi ROSE
相关产品推荐
相关产品推荐

