【问题标题】:How to reconstruct Json如何重构Json
【发布时间】:2019-10-30 22:49:15
【问题描述】:

我目前在修改 Json 架构时遇到问题,架构如下:

{
      "$schema": "www.abc.com",
      "compounds": {
            "schemas": {
                  "Run": {
                        "type": "object",
                        "properties": {
                              "runContext": {
                                    "type": "object",
                                    "properties": {
                                          "runNumber": {
                                                "type": "integer"
                                          },
                                          "conveyanceType": {
                                                "type": "string"
                                          }
                                    },
                                    "required": [
                                          "runNumber",
                                          "conveyanceType"
                                    ]
                              }
                        }
                  }
            }
      }
}

我知道这可以使用递归来完成,并且我试图获取所需的项目(代码如下),但我不知道如何将所需的项目放回属性中并更改为布尔值。 提前致谢。

    private modifyJson(jsonArr: any) {
  //console.log(jsonArr);
  for (let i in jsonArr) {
    //console.log(typeof i);
    let item = jsonArr[i];
    if (typeof item === "object") {
      //console.log("here " + JSON.stringify(item));
      this.modifyJson(item);
      if (i === "required") {
        console.log("here required " + JSON.stringify(item));
        for (let j in item) {
          //console.log(item[j]);
          const required = item[j]; //fetch required item
        }
      }
    }
  }
}

我想把它变成这样的格式:

    {
      "$schema": "www.abc.com",
      "compounds": {
            "schemas": {
                  "Run": {
                        "type": "object",
                        "properties": {
                              "runContext": {
                                    "type": "object",
                                    "properties": {
                                          "runNumber": {
                                                "type": "integer",
                                                "required": true
                                          },
                                          "conveyanceType": {
                                                "type": "string",
                                                "required": true
                                          }
                                    }
                              }
                        }
                  }
            }
      }
}

【问题讨论】:

    标签: javascript json algorithm typescript


    【解决方案1】:

    您可以在for...in 循环中使用递归函数,并在任何级别使用required 键更新对象。

    const data = {"$schema":"www.abc.com","compounds":{"schemas":{"Run":{"type":"object","properties":{"runContext":{"type":"object","properties":{"runNumber":{"type":"integer"},"conveyanceType":{"type":"string"}},"required":["runNumber","conveyanceType"]}}}}}}
    
    function update(obj) {
      for (let prop in obj) {
        if (typeof obj[prop] === 'object') update(obj[prop]);
        if (prop === 'required') {
          obj[prop].forEach(key => {
            if (obj.properties[key]) {
              obj.properties[key].required = true;
            }
          })
    
          delete obj[prop]
        }
      }
    }
    
    update(data)
    console.log(data)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 2018-12-15
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多