0

我目前使用tv4(json-schema驗證器)來驗證(客戶端)具有json模式的對象,這非常有效。驗證使用json模式的對象的一個​​屬性

但是,當我改變屬性的一個值時,我希望這個值是唯一的值,它應該被驗證。

比如我有一個用戶:

var user = { Name: 'Username', Age: 20 }; 

和架構:

{ 
    "title": "UserValidation", 
    "type": "object", 
    "properties": { 
     "Name": { 
      "minLength": 4 
     }, 
     "Age": { 
      "type": "int" 
     } 
    } 
} 

當我只改名字,我不想檢查,如果屬性「時代「 已驗證。

原因:當我有一個大對象(與子模型等),它將驗證所有屬性。而且我不知道這會是一個性能問題(某天......)。

  • 這是模式驗證可能的情況嗎?
  • 或者有沒有更好的方法來驗證對象呢 ?

我使用的是AngularJS btw。

最好的問候和謝謝。

回答

1

在出現性能問題之前,您不會遇到性能問題。 :)

沒有像這樣的部分更新驗證程序不存在的技術原因(我知道至少有一個,但它並不是第一位的確切速度)。還有更快的「從零開始」驗證器(some with benchmarks),其中包括一些具有非常類似的API /錯誤報告,因此如果將來您確實開始看到性能問題,那麼您可以切換,而不用大驚小怪。

但是,鑑於這是發生在客戶端(所以你沒有更多的用戶縮放問題),我不會擔心它。

+0

謝謝,幫了我很多! :) – DevTrong 2014-10-07 06:52:40

2

我想你必須挑出子模式來驗證子屬性。這應該很容易,用schema.properties.Name驗證user.Name。

驗證子屬性的一個問題是驗證的某些部分不在屬性本身。例如,上面的對象可能有一個必需數組。

+1

雖然這可能適用於某些模式,但通常這是不可能的。諸如'oneOf'或'dependencies'這樣的子句意味着數據一部分的變化可能會影響完全不同的區域(包括刪除/添加模式)。 – cloudfeet 2014-10-07 11:36:53