Valider JSON contre JSON Schema C#
Est-il un moyen de valider une structure JSON à l'encontre d'un JSON schéma de cette structure? J'ai cherché et trouvé JSON.Net valider mais ce n'est pas ce que je veux.
JSON.net n':
JsonSchema schema = JsonSchema.Parse(@"{
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'name': 'James',
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
//true
Cela valide pour vrai.
JsonSchema schema = JsonSchema.Parse(@"{
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'surname': 2,
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
Cela valide aussi à vrai
JsonSchema schema = JsonSchema.Parse(@"{
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'name': 2,
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
Seulement cela valide à false.
Idéalement, j'aimerais qu'elle, afin de Valider qu'il n'y a pas de champs aka name
qui ne devraient pas y être aka surname
.
voulez-vous valider chaîne(schéma) vs string(objet) ou pourriez-vous utiliser un objet comme schéma?
oui, quelque chose comme SCHÉMA
de nouveau malade, essayez de demander plus clair, peut-il que le schéma soit un objet de C# que vous avez et tu veux le tester contre entrant inconnu cordes?
Je ne suis pas sûr si je vous comprends bien, mais va ici: je reçois dans un inconnu de la chaîne et je tiens à le comparer à un schéma de la chaîne que j'ai. Que des sons comme sa sur ce que vous demandez.
oui, quelque chose comme SCHÉMA
...{'Name' : string , 'Cars': int ....}
vs OBJ ...{'Name' : Bob, 'Pants': 2....}
est faux, mais ...{'Name' : Bob, ....}
est vrai. Je voudrais obtenir dans une chaîne JSON et j'aurais besoin de pouvoir comparer le schéma dans la base de données pour s'assurer qu'il est valide.de nouveau malade, essayez de demander plus clair, peut-il que le schéma soit un objet de C# que vous avez et tu veux le tester contre entrant inconnu cordes?
Je ne suis pas sûr si je vous comprends bien, mais va ici: je reçois dans un inconnu de la chaîne et je tiens à le comparer à un schéma de la chaîne que j'ai. Que des sons comme sa sur ce que vous demandez.
OriginalL'auteur Shaun Groenewald | 2013-10-23
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez juste besoin d'ajouter
à votre schéma. Cela va arrêter propriétés inconnues fournis.
Alors maintenant, vos résultats seront:- la valeur True, False, False
code de test....
de sortie :-
Vous pouvez aussi ajouter le "nécessaire":true pour les champs qui doivent être transmises de cette façon, vous pouvez renvoyer un message avec les détails de manquant/non valide les champs:-
Au lieu d'utiliser "additionalProperties" à cette fin, il est actuellement encouragés à utiliser "propertyNames" (puisque le projet-06). Il va faire exactement le même travail (autoriser uniquement les propriétés avec des touches de s'enrôle dans l'enum cor conforme à un modèle). Voir aussi: json-schema.org/understanding-json-schema/reference/... et de considérer que:
"propertyNames" : { "enum" : ["name", "hobbies"] }
dans votre schéma au lieu de "additionalProperties".OriginalL'auteur Andy Robinson
Ok j'espère que cela aidera.
C'est votre schéma:
C'est votre validator:
Et comment les utiliser est:
Si vous avez des questions, merci de demander, espérons que cette aide, veuillez prendre en considération que ce n'est pas un code complet, sans exception, de manutention et de...
c'est pourquoi j'ai demandé si le schéma est une chaîne seulement ou peut être l'objet, je vais essayer de faire des changements pour correspondre à vos besoins.
Ok merci, désolé pour miss comprendre votre question.
hey désolé d'avoir eu beaucoup de temps ces derniers temps, le problème est résolu?
Salut, non je n'ai pas résolu encore. J'ai essayé une chaîne/regex de trouver et de comparer sur les deux chaînes.
OriginalL'auteur Liran