我需要对一些JSON应用一个抖动转换。
示例输入 JSON是..。
{
"allergen" : [ "Peanuts", "Egg", "Milk" ],
"diagnosed_by_doc" : "Yes",
"diagnosis_age" : "3-5 years old",
"doc_type" : [ "Allergist", "Dermatologist", "Other Healthcare Provider" ],
"tests" : [ "Skin prick test", "Blood tests", "Oral food challenge" ],
"outgrown" : "No"
}预期的输出为:
{
"allergen" : "Peanuts",
"diagnosed_by_doc" : "Yes",
"diagnosis_age" : "3-5 years old",
"diagnosed_by_allergist": true,
"diagnosed_by_dermatologist": true,
"diagnosed_by_other_healthcare_provider": true,
"skin_prick_test": true,
"blood_test": true,
"oral_food_challenge": true,
"outgrown" : "No"
},
{
"allergen" : "Egg",
"diagnosed_by_doc" : "Yes",
"diagnosis_age" : "3-5 years old",
"diagnosed_by_allergist": true,
"diagnosed_by_dermatologist": true,
"diagnosed_by_other_healthcare_provider": true,
"skin_prick_test": true,
"blood_test": true,
"oral_food_challenge": true,
"outgrown" : "No"
},
{
"allergen" : "Milk",
"diagnosed_by_doc" : "Yes",
"diagnosis_age" : "3-5 years old",
"diagnosed_by_allergist": true,
"diagnosed_by_dermatologist": true,
"diagnosed_by_other_healthcare_provider": true,
"skin_prick_test": true,
"blood_test": true,
"oral_food_challenge": true,
"outgrown" : "No"
},如何将两个转换应用于此JSON?
doc_type和tests列表中的每一项都被“转换为布尔值”。也就是说,如果doc_type列表包含Allergist,那么生成的JSON对象将包含diagnosed_by_allergist: true。如果短语“变态反应者”不存在,那么生成的对象就没有必要包含diagnosed_by_allergist: false。(这更像是一种条件操作,而不是数据conversion).。
在原始JSON中,所有后续数据都适用于每个过敏原。因此,例如,diagnosis_age对生成的Peanuts、Egg和Milk JSON对象应用相同的方法。
我可以使用什么抖动转换规范将allergen列表“扁平”成单独的对象和有条件存在的字段?
发布于 2022-05-05 20:26:27
您可以通过使用allergen通配符单独表示每个属性来遍历"@"列表,同时通过使用对象表示来使用条件逻辑,在第一个shift转换规范中通过大括号表示列表doc_type和tests,而第二个规范用于删除对象键名,例如
[
{
"operation": "shift",
"spec": {
"allergen": {
"*": {
"@": "&1.&2",
"@(2,diagnosed_by_doc)": "&.diagnosed_by_doc",
"@(2,diagnosis_age)": "&.diagnosis_age",
"@(2,doc_type)": {
"*": {
"Allergist": {
"#true": "&3.diagnosed_by_allergist"
},
"Dermatologist": {
"#true": "&3.diagnosed_by_dermatologist"
},
"Other Healthcare Provider": {
"#true": "&3.diagnosed_by_other_healthcare_provider"
}
}
},
"@(2,tests)": {
"*": {
"Skin prick test": {
"#true": "&3.diagnosed_by_skin_prick_test"
},
"Blood tests": {
"#true": "&3.diagnosed_by_blood_test"
},
"Oral food challenge": {
"#true": "&3.diagnosed_by_oral_food_challenge"
}
}
},
"@(2,outgrown)": "&.outgrown"
}
}
}
},
{
"operation": "shift",
"spec": {
"*": ""
}
}
]https://stackoverflow.com/questions/72130757
复制相似问题