J'ai un JSON qui est un seul objet ou un tableau du même objet. Existe-t-il un moyen d'analyser ces données à l'aide de GSON où il distinguera le seul objet vs le tableau?
La seule solution que j'ai actuellement pour cela est d'analyser manuellement le JSON et d'entourer cela avec une prise d'essai. D'abord, je vais essayer de l'analyser comme un seul objet, s'il échoue, il lancera une exception et j'essaierai ensuite de l'analyser comme une matrice. P>
Je ne veux pas l'analyser manuellement si ... ça me prendrait pour toujours.
Voici une idée de ce qui se passe. P> voici l'objet qui peut être un tableau ou un seul objet. P> [
{
"variable": "blah blah",
"objectb": {
"variable1": "1",
"variable2": "2"
}
},
{
"variable": "blah blah",
"objectb": {
"variable1": "1",
"variable2": "2"
}
},
{
"variable": "blah blah",
"objectb": [
{
"variable1": "1",
"variable2": "2"
},
{
"variable1": "1",
"variable2": "2"
}
]
}
]
3 Réponses :
Pouvez-vous essayer / l'attraper en essayant d'abord d'analyser la matrice, puis tombez-vous à l'analyse de la classe d'objet unique? p>
Vous pouvez également faire un test simple réel et regarder le premier caractère non blancheur de la chaîne que vous décerérez, s'il s'agit d'un "{", il s'agit d'un seul objet, s'il s'agit d'un "[" C'est un tableau p>
J'utilise un objet qui a un tas de variables pour tout sérialiser. J'essaie d'éviter une variable par analyse variable.
Ce sont tous le même objet, pourquoi la complexité interne de l'objet compte-t-elle et pourquoi n'utilisez-vous pas de GSON pour séraliser également l'objet, c'est pourquoi vous utilisez un GSON. Il suffit de regarder la chaîne que vous essayez de desséraliser et s'il est valide JSON, le premier caractère non-blanchisson doit vous dire si vous analyse d'une matrice ou d'un objet.
Consultez mon édition, peut-être que cela clarifiera ce que je veux dire quand je ne regarde pas la chaîne par string.
Essayez d'utiliser com.google.gson.jsonparser. Il existe différentes manières d'obtenir votre objet à l'aide de l'instance JSPELement, par exemple - simplement à l'aide des méthodes COM.Google.gson.gson: P> public <T> T fromJson(com.google.gson.JsonElement json, java.lang.Class<T> classOfT) throws com.google.gson.JsonSyntaxException
public <T> T fromJson(com.google.gson.JsonElement json, java.lang.reflect.Type typeOfT) throws com.google.gson.JsonSyntaxException
Je viens de changer objetb [] code> à
list
objectea code> déclaration.
{variable=blah blah, objectb={variable1=1, variable2=2}}
{variable=blah blah, objectb={variable1=1, variable2=2}}
{variable=blah blah, objectb=[{variable1=1, variable2=2}, {variable1=1, variable2=2}]}
C'était la réponse, mais je reçois maintenant une indexOutOfboundsException parce que je pense parfois qu'il essaie de l'analyser, mais c'est vide? Je vais y regarder plus. Mais merci!
N'hésitez pas à ajouter une autre question sur Donc avec pleine stacktrace et code. Je vais sûrement jeter un coup d'oeil à ça.
Comment géreriez-vous cela si "variable1", "variables2" étaient dynamiques? Signification, votre classe Objectb pourrait avoir n nombre de champs. Comme cette structure JSON: Pastebin.com/uudckblv
Désolé pour le post redondant. Je l'ai compris pour la gestion du nombre dynamique de variables (pour ma question ^^). Au lieu d'utiliser ObjectB Class, je viens d'utiliser la liste de la carte à l'intérieur de la classe Objeca. Quelque chose comme ça. Liste publique
ObjectA x = Nouveau GSON (). Fromjson (JSRONDING, objecteA.Class ); code> Merci pour l'idée. :)
C'est la bonne façon: Stackoverflow.com/a/17650863/3329488