base64字符串的JSON模式验证不起作用

时间:2016-08-09 16:23:57

标签: json jsonschema

我正在使用以下架构来验证图像base64字符串:

 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "type": "object",
   "properties": {
     "image": {
       "type": "string",
       "media": {
         "contentEncoding": "base64",
         "oneOf": [
               { "mediaType": "image/png" },
               { "mediaType": "image/jpg" },
               { "mediaType": "image/jpeg" }
         ]
       }
     }
   },
   "required": [
     "image"
   ]
 }

但架构不起作用,任何字符串,甚至无效,都会传递给应用程序

我正在使用JSON Schema for PHP来验证json输入

更新

这是我试图改变的,但它不起作用

{
 "$schema": "http://json-schema.org/draft-04/schema#",
 "type": "object",
 "properties": {
   "image": {
     "title": "image",
     "type": "string",
     "media": {
       "binaryEncoding": "base64",
       "type": "image/png"
     }
   }
 },
 "required": [
   "image"
 ]
 }

1 个答案:

答案 0 :(得分:1)

您的问题是JSON Hyper-Schema Draft#4不再支持的旧语法。它将 contentEncoding 更改为 binaryEncoding (请参阅更改日志here)。

该规范的相关摘录如下:

    "imgData": {
        "title": "Article Illustration (small)",
        "type": "string",
        "media": {
            "binaryEncoding": "base64",
            "type": "image/png"
        }
    }

另外,您没有提到您正在使用哪个验证器。这可能很重要,因为不同实施的合规性可能会有所不同。

更新:此外,$schema应该是http://json-schema.org/draftv4/hyper-schema,用于超级架构处理。