Javascript 修改JSON以使用react jsonschema表单
我刚开始,它需要以特定的格式输入。 我得到了一个嵌套的JSON,但我无法根据所需的输入格式递归地改变JSON 给定的是JSONJavascript 修改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":
{
"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)