Comment valider une chaîne JSON en Java? Ou pourrais-je l'analyser en utilisant des expressions régulières?
java
json
validation
sappu
la source
la source
Réponses:
Une idée sauvage, essayez de l'analyser et attrapez l'exception:
Ce code utilise l' implémentation de l' API JSON org.json qui est disponible sur github , dans maven et partiellement sur Android .
la source
Bibliothèque JACKSON
Une option serait d'utiliser la bibliothèque Jackson . Importez d'abord la dernière version (maintenant):
Ensuite, vous pouvez implémenter la bonne réponse comme suit:
Option Google GSON
Une autre option consiste à utiliser Google Gson . Importez la dépendance:
Encore une fois, vous pouvez implémenter la solution proposée comme suit:
Un test simple suit ici:
Veuillez noter qu'il pourrait y avoir un problème "mineur" dû aux virgules de fin qui seront corrigées dans la version
3.0.0
.la source
new ObjectMapper().readTree("28xjRBuOQqupRopHeSuhRQ")
analyse sans exception comme IntNode (28). Pas vraiment attendu ...Avec Google Gson, vous pouvez utiliser JsonParser:
la source
Vous pouvez utiliser le .mayBeJSON (String str) disponible dans la bibliothèque JSONUtils .
la source
Cela dépend de ce que vous essayez de prouver avec votre validation. Il est certain que l'analyse du json, comme d'autres l'ont suggéré, est meilleure que l'utilisation de regex, car la grammaire de json est plus compliquée qu'elle ne peut être représentée avec seulement des regex.
Si le json ne sera jamais analysé que par votre code java, utilisez le même analyseur pour le valider.
Mais l'analyse syntaxique ne vous dira pas nécessairement si elle sera acceptée dans d'autres environnements. par exemple
Si votre validation doit être très approfondie, vous pouvez:
la source
Veuillez télécharger la bibliothèque stringtree-json
la source
Un peu sur l'analyse:
Json, et en fait tous les langages, utilisent une grammaire qui est un ensemble de règles pouvant être utilisées comme substitutions. pour analyser json, vous devez essentiellement travailler sur ces substitutions à l'envers
Json est une grammaire sans contexte , ce qui signifie que vous pouvez avoir des objets / tableaux imbriqués à l'infini et que le json serait toujours valide. regex ne gère que les grammaires régulières (d'où le 'reg' dans le nom), qui est un sous-ensemble de grammaires sans contexte qui ne permettent pas une imbrication infinie, il est donc impossible d'utiliser uniquement regex pour analyser tous les json valides. vous pourriez utiliser un ensemble compliqué de regex et de boucles en supposant que personne ne pourra nicher au-delà, disons, 100 niveaux de profondeur, mais ce serait quand même très difficile.
si vous êtes prêt à écrire votre propre analyseur,
vous pouvez faire un analyseur de descente récursif après avoir travaillé la grammaire
la source
Vérifiez si une chaîne donnée est un JSON valide dans Kotlin . J'ai converti la réponse de MByD Java en Kotlin
la source
Ici vous pouvez trouver un outil qui peut valider un fichier JSON, ou vous pouvez simplement désérialiser votre fichier JSON avec n'importe quelle bibliothèque JSON et si l'opération réussit, elle devrait être valide ( google-json par exemple qui lèvera une exception si l'entrée il analyse n'est pas JSON valide).
la source
En utilisant Playframework 2.6, la bibliothèque Json trouvée dans l'API java peut également être utilisée pour analyser simplement la chaîne. La chaîne peut être un élément json du tableau json. Étant donné que la valeur renvoyée n'a pas d'importance ici, nous détectons simplement l'erreur d'analyse pour déterminer que la chaîne est une chaîne Json correcte ou non.
la source
À mon humble avis, le moyen le plus élégant consiste à utiliser l' API Java pour le traitement JSON (JSON-P), l'une des normes JavaEE conforme au JSR 374 .
À l'aide de Maven, ajoutez la dépendance sur JSON-P:
Visitez la page officielle JSON-P pour plus d'informations.
la source
Voici un exemple de travail pour l'analyse stricte de json avec la bibliothèque gson :
Voir aussi mon autre réponse détaillée dans Comment vérifier si JSON est valide en Java en utilisant GSON avec plus d'informations et un cas de test étendu avec divers exemples non valides.
la source
Comme vous pouvez le voir, il existe de nombreuses solutions, elles analysent principalement le JSON pour le vérifier et à la fin vous devrez l'analyser pour en être sûr.
Mais, selon le contexte, vous pouvez améliorer les performances avec une pré-vérification.
Ce que je fais lorsque j'appelle des API, c'est simplement vérifier que le premier caractère est «{» et le dernier est «}». Si ce n'est pas le cas, je ne prends pas la peine de créer un analyseur.
la source
J'ai trouvé une solution très simple pour cela.
Veuillez d'abord installer cette bibliothèque
net.sf.json-lib
pour cela.Terminé. Prendre plaisir
la source
Les réponses sont partiellement correctes. J'ai également rencontré le même problème. L'analyse du json et la vérification de l'exception semble la manière habituelle, mais la solution échoue pour l'entrée json quelque chose comme
{"outputValueSchemaFormat": "", "sortByIndexInRecord": 0, "sortOrder": 847874874387209 "décroissant"} kajhfsadkjh
Comme vous pouvez le voir, le json n'est pas valide car il y a des caractères inutiles à la fin. Mais si vous essayez d'analyser le json ci-dessus en utilisant jackson ou gson, vous obtiendrez la carte analysée des json valides et les caractères de fin de garbage sont ignorés. Ce qui n'est pas la solution requise lorsque vous utilisez l'analyseur pour vérifier la validité de json.
Pour une solution à ce problème, voir ici .
PS: Cette question a été posée et répondu par moi.
la source
puis appelez cette fonction en passant votre chaîne JSON :)
la source
La solution ci-dessus couvre les deux scénarios:
la source
Une solution utilisant la
javax.json
bibliothèque:la source
Vous pouvez utiliser la
WellFormedJson
classe de la bibliothèque de validation déclarative Validol .La déclaration elle-même pourrait ressembler à ceci:
La phase de vérification ressemble à ça:
Cela peut sembler exagéré pour une tâche aussi simple, mais cela brille lorsque vous devez valider une demande complexe. Consultez la section de démarrage rapide de validol .
la source