2015-03-31 20 views
1

我有以下JSON有效載荷,在那裏我想爲元素之一添加ENUM類型值。JSON枚舉模式問題 - 糾正我有效的模式

{ 
    "firstName" : "firstName", 
    "lastName" : "lastName", 
    "systemIds" : [ { 
    "systemName" : "SAP", 
    "systemId" : "99c27c63-e0b6-4585-8675-7aa3811eb4c3" 
    }, { 
    "systemName" : "SFDC", 
    "systemId" : "b65abf1d-825d-4ee3-9791-02d2cdd5e6f4" 
    }, { 
    "systemName" : "MONGODB", 
    "systemId" : "18e50430-8589-42d6-8477-58839a8bf202" 
    } ] 
} 

這是我的模式,我試圖修改後,它是自動生成使用本網站。 http://jsonschema.net/#/

我按照我的期望在這裏手動添加ENUM類型。請糾正這個SCHEMA有什麼問題。

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://abcd.com/schemas/customerInfo", 
    "type": "object", 
    "properties": { 
    "firstName": { 
     "id": "http://abcd.com/schemas/customerInfo/firstName", 
     "type": "string" 
    }, 
    "lastName": { 
     "id": "http://abcd.com/schemas/customerInfo/lastName", 
     "type": "string" 
    }, 
    "systemIds": { 
     "id": "http://abcd.com/schemas/customerInfo/systemIds", 
     "type": "array", 
     "minItems": 1, 
     "uniqueItems": false, 
     "additionalItems": true, 
     "items": { 
     "anyOf": [ 
      { 
      "id": "http://abcd.com/schemas/customerInfo/systemIds/0", 
      "type": "object", 
      "properties": { 
       "systemName": { 
       "id": "http://abcd.com/schemas/customerInfo/systemIds/0/systemName", 
       "type": { "enum": [ "SAP", "MONGODB", "ERP", "SFDC" ] } 
       },"required": ["type"], 
       "systemId": { 
       "id": "http://abcd.com/schemas/customerInfo/systemIds/0/systemId", 
       "type": "string" 
       } 
      } 
      } 
     ] 
     } 
    } 
    } 
} 
+0

好_what_是錯呢?不要讓我們猜測。 – 2015-03-31 01:47:32

+0

我不確定這裏有什麼問題。我是JSON模式創建的新手,我使用此鏈接來驗證此JSON模式 - http://jsonschemalint.com/draft4/#這給我以下錯誤。 data.properties。* \t引用的模式不匹配\t [對象對象] – devanand 2015-03-31 01:57:53

回答

3

數組項的模式看起來不正確。

{ 
    "anyOf": [ 
    { 
     "id": "http://abcd.com/schemas/customerInfo/systemIds/0", 
     "type": "object", 
     "properties": { 
     "systemName": { 
      "id": "http://abcd.com/schemas/customerInfo/systemIds/0/systemName", 
      "type": { 
      "enum": [ 
       "SAP", 
       "MONGODB", 
       "ERP", 
       "SFDC" 
      ] 
      } 
     }, 
     "required": [ 
      "type" 
     ], 
     "systemId": { 
      "id": "http://abcd.com/schemas/customerInfo/systemIds/0/systemId", 
      "type": "string" 
     } 
     } 
    } 
    ] 
} 

您聲明應該有一個"required"屬性,但是您放入了一個無效的模式。這需要刪除。但也許你的意思是"type"財產是需要的地方,是錯位。我沒有看到任何關係。

"systemName"屬性是一個字符串類型,其值應該在該枚舉中。那裏的架構是無效的。

這應該爲你工作:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://abcd.com/schemas/customerInfo", 
    "type": "object", 
    "properties": { 
    "firstName": { 
     "id": "http://abcd.com/schemas/customerInfo/firstName", 
     "type": "string" 
    }, 
    "lastName": { 
     "id": "http://abcd.com/schemas/customerInfo/lastName", 
     "type": "string" 
    }, 
    "systemIds": { 
     "id": "http://abcd.com/schemas/customerInfo/systemIds", 
     "type": "array", 
     "minItems": 1, 
     "uniqueItems": false, 
     "additionalItems": true, 
     "items": { 
     "anyOf": [ 
      { 
      "id": "http://abcd.com/schemas/customerInfo/systemIds/0", 
      "type": "object", 
      "properties": { 
       "systemName": { 
       "id": "http://abcd.com/schemas/customerInfo/systemIds/0/systemName", 
       "type": "string", 
       "enum": [ "SAP", "MONGODB", "ERP", "SFDC" ] 
       }, 
       "systemId": { 
       "id": "http://abcd.com/schemas/customerInfo/systemIds/0/systemId", 
       "type": "string" 
       } 
      } 
      } 
     ] 
     } 
    } 
    } 
} 
+1

謝謝傑夫糾正它。只是爲了確保在這裏,如果我在這裏使用「anyOf」,這意味着ENUM列表中的任何值都可以分配給「systemName」元素嗎? – devanand 2015-03-31 17:36:54

+0

不,在這裏通過使用'「anyOf」''''''''''''''''''說明數組項可以是所提供的模式數組中的任何類型,而不管數組中的索引。使用數組,您可以控制哪些項目出現在哪個索引中,但這裏沒有使用該項目。 – 2015-03-31 17:51:14

+0

那麼我在這裏尋找正確的價值。看看我的JSON請求有效載荷作爲我的問題的一部分,並建議我爲它的正確價值。 – devanand 2015-03-31 18:57:53