10
votes

Utilisation de GSON pour analyser l'objet JSON VS JSON

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> xxx pré>

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"
            }
        ]
    }
]


1 commentaires

3 Réponses :


0
votes

Pouvez-vous essayer / l'attraper en essayant d'abord d'analyser la matrice, puis tombez-vous à l'analyse de la classe d'objet unique?

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


3 commentaires

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.



4
votes

Essayez d'utiliser com.google.gson.jsonparser. xxx pré>

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


0 commentaires

8
votes

Je viens de changer objetb [] code> à list code> dans 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}]}


4 commentaires

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 > Objectb = Nouvelle ArrayList > (); ObjectA x = Nouveau GSON (). Fromjson (JSRONDING, objecteA.Class ); Merci pour l'idée. :)