使用JSON Schema获取特定类型的所有值(HTML字符串)

时间:2014-07-18 09:14:29

标签: json node.js jsonschema

我尝试仅从包含对象,字符串和HTML字符串的JSON文件中选择HTML字符串。这就是JSON的样子:

{
  "person1": {
    "name": "Marcus",
    "bio": "<h2>Academic</h2><p>Lorem ipsum <em>dolores</em> sit amet. Conquistat ergo sum.</p>"
  },
  "person2": {
    "name": "Philipp",
    "bio": "<h2>Academic</h2><p>Ipsum lorem <em>vencit</em> sit amet. Conquistat ergo sum.</p>"
  }
}

为了将正常字符串与HTML字符串分开,我引入了密钥"format" : "html"

{
  "$schema": "http://json-schema.org/draft-04/schema#",

  "definitions": {
    "person": {
      "type": "object",
      "properties": {
        "name": { 
          "type": "string"
          },
        "age": {
          "type": "integer"
          },
        "bio": {
          "type": "string",
          "format": "html"
        }
      },
      "required": ["name", "age", "bio"]
    }
  }
}

问题:如何选择具有"format" : "html"属性的所有值?

使用自定义键/值可能不是最优雅的解决方案,我正在考虑切换到更多standard solution。我想获取HTML字符串的原因是它们需要经过验证并sanitized

应用程序本身是在node.js上构建的,所以对于帮助我使用这个JSON / JSON模式的节点模块的建议非常感激:)

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我使用了一个指向/person/bio的JSON指针:

function getValue(object, path) {
    object = object || {};

    if (path === "") {
        return object;
    }

    var fragments = path.split("/"),
    iter = 0, key,
    length = fragments.length,
    result = object;

    while (result != null && iter < length) {
        key = fragments[iter];
        if (key !== "#") {
             result = result[key];
        }
        iter += 1;
    }

    return result || null;
}