Javascript 修改JSON以使用react jsonschema表单

Javascript 修改JSON以使用react jsonschema表单,javascript,json,object,react-jsonschema-forms,Javascript,Json,Object,React Jsonschema Forms,我刚开始,它需要以特定的格式输入。 我得到了一个嵌套的JSON,但我无法根据所需的输入格式递归地改变JSON 给定的是JSON { "Coordinates": { "X-Coordinate": 47, "Y-Coordinate": -122 }, "Coordination Type": { "Cartesion Mode": false, "Starting Range": { "Start": 8000, "End":

我刚开始,它需要以特定的格式输入。 我得到了一个嵌套的JSON,但我无法根据所需的输入格式递归地改变JSON

给定的是JSON

{
  "Coordinates": {
    "X-Coordinate": 47,
    "Y-Coordinate": -122
  },
  "Coordination Type": {
    "Cartesion Mode": false,
    "Starting Range": {
      "Start": 8000,
      "End": 9000
    }
  },
  "Map": {
    "Offline Map": false,
    "URL": "http://localhost:9000"
  }
}
这个新的JSON需要递归生成

{
  "Coordinates": {
    "type": "object",
    "title": "Coordinates",
    "properties": {
      "X-Coordinate": {
        "type": "number",
        "title": "X-Coordinate",
        "default": 47
      },
      "Y-Coordinate": {
        "type": "number",
        "title": "Y-Coordinate",
        "default": -122
      }
    }
  },
  "Coordination Type": {
    "type": "object",
    "title": "Coordination Type",
    "properties": {
      "Cartesion Mode": {
        "type": "boolean",
        "title": "Cartesion Mode",
        "default": false
      },
      "Starting Range": {
        "type": "object",
        "title": "Start Range",
        "properties": {
          "Start": {
            "type": "number",
            "title": "Start",
            "default": 8000
          },
          "End": {
            "type": "number",
            "title": "End",
            "default": 9000
          }
        }
      }
    }
  },
  "Map": {
    "type": "object",
    "title": "Map",
    "properties": {
      "Offline Map": {
        "type": "boolean",
        "title": "Offline Map",
        "default": false
      },
      "URL": {
        "type": "string",
        "title": "URL",
        "default": "http://localhost:9000"
      }
    }
  }
}
我能够使用迭代格式实现这一点,但这是不可伸缩的。我花了好几个小时才用递归方法得到这个结果


如果我能得到一个递归方法,用
javascript

将给定的JSON更新为所需格式,我将非常感激。我想这就完成了。如果你看到我错过了什么,请告诉我

//从问题复制的输入数据
常量输入={
“坐标”:{
“X坐标”:47,
“Y坐标”:-122
},
“协调类型”:{
“卡特森模式”:错误,
“起始范围”:{
“开始”:8000,
“结束”:9000
}
},
“地图”:{
“离线地图”:false,
“URL”:”http://localhost:9000"
}
};
//递归字段转换函数
const convertField=(键,值)=>(
{
类型:值的类型、//“对象”、“布尔”、“数字”、“字符串”
title:key,//字段名也是标题(例如“起始范围”)
...(
值的类型!=“对象”
?{default:value}//primitive type.default,我们就完成了
: {  
属性:Object.entries(值)
.reduce((facc,[字段,fvalue])=>({
…facc,//保留以前的迭代
[字段]:{//保留字段名,例如“起始范围”,
…convertField(field,fvalue)//对字段的值进行递归
}
}), {})
}
)
}
);
//开球
常量输出=对象。条目(输入)
.reduce((acc,[键,值])=>({
…acc,//保留以前的迭代结果
[key]:{…convertField(key,value)}//转换每个属性
}), {}
);
//显示结果
document.getElementById('result').innerText=(JSON.stringify(output,null,2))
可用于转换值:

var json=`{
“坐标”:{
“X坐标”:47,
“Y坐标”:-122
},
“协调类型”:{
“卡特森模式”:错误,
“起始范围”:{
“开始”:8000,
“结束”:9000
}
},
“地图”:{
“离线地图”:false,
“URL”:”http://localhost:9000"
}
}`
var obj=JSON.parse(JSON,(key,val,type=typeof val)=>!key?val:
{type,title:key,[type=='object'?'properties':'default']:val})
console.log(obj)