如何获取JSON对象的模式并输出到包含类型的字符串

时间:2015-10-01 05:31:31

标签: javascript json parsing

给出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
   }   
 }

2 个答案:

答案 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就无效。

另外,请注意,此脚本不会递归处理内部对象 - 您可以自己执行此操作。