Node + Json格式验证器

时间:2016-05-10 13:03:08

标签: json node.js validation

我在服务器方面几乎没有问题。

我有超过50个API。

需要检查每个API(GET,POST)方法以下内容。

  1. 验证输入有效json。
  2. 输入数据需要用数据检查一些密钥名称。
  3. 例如1:

    {
            "name": "<city name1>",
            "status": 1,
            "id" : 3,
            "code" : 5,
            "abcd" : "44",
          ---------------
            ------------
    }
    

    在上面输入我需要检查几个键是mantory。例如:姓名,代码

    示例2:

    {
        "country": [
            {
                "state": [
                    {
                        "name": "<city name1>",
                        "status": 1
                    }, {
                        "name": "<city name2>",
                        "status": 2
                    }, {
                        "name": "<city name3>",
                        "status": 3
                    }
                ],
                "name": "<state Name1>"
            }, {
                "state": [
                    {
                        "name": "<city name1>",
                        "status": 1
                    }, {
                        "name": "<city name2>",
                        "status": 2
                    }, {
                        "name": "<city name3>",
                        "status": 3
                    }
                ],
                "name": "<state Name2>"
            }
        ]
    }
    

    在上面的示例中,我需要检查州和城市&gt;名称是强制性的。

    我检查了包裹,但没有找到适合我的包裹。

    有任何包用于检查json验证吗?

2 个答案:

答案 0 :(得分:0)

我使用validator。它有许多功能,如isEmail,isAlphaNumeric等...

它还支持消毒。回购中的样品和测试。

要检查密钥是否存在,可以使用标准的hasOwnProperty

Check if a key exists inside a json object

这些选项将很快,并且能够将非常具体的自定义检查和更好的错误消息反馈给消费者。

另一种选择是json架构。简单地检查代码(上图)可能更快,但使用json模式,您可以在api中创建公共代码,为每个api加载模式文件,这样可能会减少代码。

示例lib。

https://www.npmjs.com/package/jsonschema

因此,它可以平衡更多/更少的代码,性能以及您希望自定义检查和错误消息的方式。

答案 1 :(得分:0)

如果您正在使用,请尝试使用此解决方案https://github.com/askucher/ftjs

npm install ftjs

您可以定义类型定义文件(示例)

&#13;
&#13;
#SimpleTypes

String         : /.?/

Integer        : Global.Integer

Int            : Integer

Boolean        : Global.Boolean

Bool           : Boolean

Double         : Global.Double

Numeric        : Double | Integer

Null           : Global.Null

Undefined      : Global.Undefined

Email          : /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i

Strings        : [String]

#TypeExtensions

String...
Min min        : /^.{#{min},}$/
Max max        : /^.{,#{max}}$/
Range min max  : /^.{#{min},#{max}}$/

Integer...
Min min        : @ >= min
Max max        : @ <= max


#Enums

Status         : "active" | "inactive"

Missing        : Null | Undefined


#ComplexTypes

User
------------
email          : Email
picture        : String
firstname      : String Range(5,20)
lastname       : String Min(5) Max(20)
status         : Status
bio            : String | Missing
tags           : [String]
&#13;
&#13;
&#13;

&#13;
&#13;
 var types = require("ftjs");
   var fs = require("fs");

   var validate = types({
      System: fs.readFileSync("./examples/System.ft").toString("utf8")
   });

   var user = {
      email: 'a.stegno@gmail.com',
      picture: 'http://some-website.com/picture.png',
      firstname: 'Andrey',
      lastname: 'Test',
      status: 'active',
      bio: 'Ho',
      tags: ["user"]
   };

   validate("System.User", user); //true
&#13;
&#13;
&#13;