使用Newtonsoft.Json序列化时如何将字典属性扁平化展开为同级属性
核心实现思路
不要将存储问卷答案的字典作为surveyAnswers属性嵌套进上层对象,直接将答案字典的所有键值对和上层对象的固定属性做同级合并即可。
常用语言实现示例
Python 实现
如果你用Python构造请求体,直接用字典解包语法合并即可:
# 存储动态问题的答案字典 survey_answers = { "Q1": "Green", "Q2": "Sometimes", "Q3": "Agree", "Q4": 9 } # 构造单个survey对象时,用**直接解包合并答案字典 survey_item = { "sessionId": "sesh2", "instrumentId": "DEMO", "clientId": "a101", "assignedToType": "Client", "completeDate": "20201007", "answerStyle": "byText", # 直接解包答案字典,所有Q开头的字段会直接作为同级属性 **survey_answers } # 最终序列化后就不会有surveyAnswers嵌套层级
如果已经生成了带surveyAnswers嵌套的对象,可以手动处理:
# 取出嵌套的答案字典 answers = survey_item.pop("surveyAnswers") # 合并到上层对象 survey_item.update(answers)
JavaScript 实现
用对象展开运算符合并即可:
// 存储动态问题的答案字典 const surveyAnswers = { "Q1": "Green", "Q2": "Sometimes", "Q3": "Agree", "Q4": 9 } // 构造单个survey对象时,用...直接展开合并答案字典 const surveyItem = { "sessionId": "sesh2", "instrumentId": "DEMO", "clientId": "a101", "assignedToType": "Client", "completeDate": "20201007", "answerStyle": "byText", // 直接展开答案字典,所有Q开头的字段会直接作为同级属性 ...surveyAnswers }
如果已经生成了带surveyAnswers嵌套的对象,可以手动处理:
// 解构取出surveyAnswers和剩余属性 const { surveyAnswers, ...rest } = surveyItem // 合并得到最终对象 const processedItem = { ...rest, ...surveyAnswers }
效果验证
以上方案序列化后得到的结构完全符合要求:
{ "sessionId": "sesh2", "instrumentId": "DEMO", "clientId": "a101", "assignedToType": "Client", "completeDate": "20201007", "answerStyle": "byText", "Q1": "Green", "Q2": "Sometimes", "Q3": "Agree", "Q4": 9 }
内容的提问来源于stack exchange,提问作者Garen
相关产品推荐
相关产品推荐

