Comment assurez-vous que la chaîne est valide JSON à l'aide de JSON.NET
J'ai une chaîne brute. Je veux juste vérifier si la chaîne est JSON valide ou pas. Je suis à l'aide d'JSON.NET.
Vous devez vous connecter pour publier un commentaire.
J'ai une chaîne brute. Je veux juste vérifier si la chaîne est JSON valide ou pas. Je suis à l'aide d'JSON.NET.
Vous devez vous connecter pour publier un commentaire.
À L'Aide De Code:
Votre meilleur pari est d'utiliser les analyser à l'intérieur d'un
try-catch
et attraper une exception en cas d'échec de l'analyse. (Je ne suis pas au courant de toutTryParse
méthode).(À L'Aide De JSON.Net)
Façon la plus simple serait de
Parse
la chaîne à l'aide deJToken.Parse
, et aussi pour vérifier si la chaîne commence par{
ou[
et se termine avec}
ou]
respectivement (ajouté à partir de ce réponse):La raison pour ajouter des contrôles pour
{
ou[
etc a été basée sur le fait queJToken.Parse
serait d'analyser les valeurs telles que la"1234"
ou"'a string'"
comme un jeton valide. L'autre option pourrait être d'utiliser les deuxJObject.Parse
etJArray.Parse
dans l'analyse et voir si quelqu'un d'entre eux réussit, mais je crois que la vérification de{}
et[]
devrait être plus facile. (Merci @RhinoDevel pour pointage sortir)Sans JSON.Net
Vous pouvez utiliser .Net framework 4.5 Système.Json espace de noms ,comme:
(Mais, vous devez installer
System.Json
via Nuget package manager à l'aide de la commande:PM> Install-Package System.Json -Version 4.0.20126.16343
sur la Console du Gestionnaire de Package) (prises de ici)Non Code moyen:
Généralement, quand il y a une petite chaîne json et que vous essayez de trouver une erreur dans la chaîne json, puis j'ai personnellement préfèrent utiliser les outils en ligne. Ce que je fais habituellement est:
ses un JSON valide.
générer un modèle de classe et donc dé-sérialiser
à l'aide de JSON.Net.
TryParse
groupe de méthodes doit toujours être utilisée si elle est disponible. Ici, ils ne le sont pas. Donctry-catch
est la seule manière possible, ou si vous souhaitez écrire votre propre deserializer... Une chose de plus à ajouter, si vous essayez de valider json, alors probablement que vous traitez avec inconnuJToken.Parse("1234")
! Peut-être une bonne idée de vérifier tout d'abord, si la chaîne commence par[
ou{
. Une autre alternative est l'utilisationJObject.Parse()
etJArray.Parse()
.JToken.Parse
serait se comporter comme ça. Après avoir regardé la documentationJToken.Parse
ont travaillé pour"'a astring'"
ainsi. Modifié ma réponse en conséquence. Merci encore pour le pointant à l'extérieur.{
et[
. Utilisez simplementJToken.Parse
et de vérifier la valeur de retour estJObject
ouJArray
.JToken.Parse("{a:1}")
n' pas jeter l'exception, même si ce n'est pas valide JSON -a
devrait être cité (stackoverflow.com/q/949449/3116322)bool success
etobject result
de sorte que l'analyse n'est pas répété.Utilisation
JContainer.Parse(str)
méthode pour vérifier si le str est un Json valide. Si cela lève une exception, alors il n'est pas un Json valide.JObject.Parse
- Peut être utilisé pour vérifier si la chaîne de caractères est un objet Json valideJArray.Parse
- Peut être utilisé pour vérifier si la chaîne est un Tableau Json valideJContainer.Parse
- Peut être utilisé pour vérifier à la fois l'objet Json & TableauJContainer.Parse("1234");
.Bâtiment Habib réponse, vous pourriez écrire une méthode d'extension:
Qui peut ensuite être utilisé comme ceci:
JToken.Parse(s);
retournetrue
même siJToken.Parse(123);
true
pour cette invalideJSON
:{A:{"B": 1}}
Juste ajouter quelque chose à l' @Habib réponse, vous pouvez également vérifier si la donnée JSON est à partir d'un type valide:
J'ai trouvé que JToken.Analyser les traite de façon incorrecte invalid JSON telles que les suivantes:
Coller la chaîne JSON dans http://jsonlint.com/ - il n'est pas valide.
Donc j'utilise:
{ name : "l am invalid JSON" }
Concernant Tom Hêtre de la réponse; je suis venu avec ce qui suit:
Avec une utilisation de l'suivantes:
string
, mais cette réponse ne devrait vraiment un) de ne pas être ici ou b) de dire "j'ai utilisé Tom Hêtre réponse" sans lethis
, c'est à dire sans en faire une extension de membre) - à la fois cette réponse et l'référencé un ont le même souci de concision et de ses faiblesses. Si vous devez faire de ce point, il suffit de mettre un commentaire sur l'autre réponse.Cette méthode ne nécessite pas de bibliothèques externes