给出root.value的浏览器调试器输出,其中包含javascript中的两个属性
root.value
__proto__: {...}
firstname: "my name"
age: 25
我想将其解析为JSON字符串,包括类似下面的类型
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Basic Info",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"age": {
"type": "number"
}
}
}
有没有人知道如何在javascript或我可以使用的任何框架中实现这一目标?
注意:我自己没有创建JSON,它是另一个框架的输出。因此,字段的类型在运行时才会被识别。
JSON.stringify(root.value);
只返回
{
{
"firstname":" my name"
},
{
"age": 25
}
}
答案 0 :(得分:2)
您还可以使用以下功能。
function getSchema(id, obj) {
if (Array.isArray(obj)) {
var retObj = getSchema(id, obj[0]);
delete retObj.title;
return {
'title': id,
'type': 'array',
'items': retObj
};
} else if (typeof obj === 'object') {
var retObj = {
'title': id,
'type': 'object'
};
retObj.properties = {};
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
retObj.properties[prop] = getSchema(prop, obj[prop]);
delete retObj.properties[prop].title;
}
}
return retObj;
} else {
return {
'title': id,
'type': typeof obj
};
}
}
您可以按照以下方式调用它
getSchema('My object', myObj)
答案 1 :(得分:1)
您可以遍历对象属性并组合所需的对象。
var o = {
d: 15,
s: "qwe",
b: true,
q: {}
};
var result = [];
for (var property in o)
{
if (!o.hasOwnProperty(property)) continue;
var resultItem = {
type: typeof(o[property])
};
resultItem[property] = o[property];
result.push(resultItem);
}
var textResult = JSON.stringify(result, null, 2); // That's what you are looking for
document.write("<pre>" + textResult + "</pre>");
请注意,最外部的大括号为[]
,因为预期的结果是对象数组。只要您的对象没有名称,您在问题中提供的JSON就无效。
另外,请注意,此脚本不会递归处理内部对象 - 您可以自己执行此操作。