首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表分离为对象和条件值的seperate变换

将列表分离为对象和条件值的seperate变换
EN

Stack Overflow用户
提问于 2022-05-05 16:39:47
回答 1查看 30关注 0票数 0

我需要对一些JSON应用一个抖动转换。

示例输入 JSON是..。

代码语言:javascript
复制
{
  "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"
}

预期的输出为:

代码语言:javascript
复制
{
  "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?

  1. 列表中的每一项都成为它自己的JSON对象,
  2. doc_typetests列表中的每一项都被“转换为布尔值”。也就是说,如果doc_type列表包含Allergist,那么生成的JSON对象将包含diagnosed_by_allergist: true。如果短语“变态反应者”不存在,那么生成的对象就没有必要包含diagnosed_by_allergist: false。(这更像是一种条件操作,而不是数据conversion).

在原始JSON中,所有后续数据都适用于每个过敏原。因此,例如,diagnosis_age对生成的PeanutsEggMilk JSON对象应用相同的方法。

我可以使用什么抖动转换规范将allergen列表“扁平”成单独的对象和有条件存在的字段?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-05 20:26:27

您可以通过使用allergen通配符单独表示每个属性来遍历"@"列表,同时通过使用对象表示来使用条件逻辑,在第一个shift转换规范中通过大括号表示列表doc_typetests,而第二个规范用于删除对象键名,例如

代码语言:javascript
复制
[
  {
    "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": {
      "*": ""
    }
  }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72130757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档