7
votes

La méthode JSONOBJECT.ADDPROPERTY ajoute des guillemets inutiles et des barres obliques à sa valeur

c'est ma chaîne forte> xxx pré>

J'ai ajouté cette chaîne à mon jsonObject code> qui est une classe de com.google.gson.jsonObject package fort> p> xxx pré>

mais quand je me connecte mon string code> et jsonObject code> forte> p> xxx pré>

j'ai trouvé le résultat strong> p> xxx pré>

maintenant, ma question est: strong> p>

pourquoi ces guillemets et ces barres de citation sont ajoutés à la valeur de JSONOBJECT code>? Y a-t-il une raison appropriée de cela? P>

Il entrave vraiment le processus de vérification de la valeur de chaîne au côté serveur. p>

"fort> J'ai fait une solution temporaire pour accomplir la tâche en coupant le caractère unique des deux côtés comme suit forte> p> xxx pré>

ceci Travaillé parfaitement, mais je ne pense pas que ce soit une meilleure idée d'avenir !!! p>

Informations supplémentaires: strong> p>

variable actuelTenkno code> n'est pas déclaré directement comme indiqué ci-dessus, il a été extrait de SharedPreferences Code> & s'il est déclaré directement, tout fonctionne bien. P>

String currentTokenNo = preferences.getString(LOGINCRED_TOKEN,"");


12 commentaires

Êtes-vous sûr que CurrentTenkenno La variable est déclarée sous la forme String ?


@Miensol oui je suis sûr !!! Il est généré une forme cryptée de chaîne ..


Quel type de type de chaîne passez-vous? Faire de char, Const Char, quelque chose comme ça? Avez-vous également un codage comme UTF8 ou votre dortoir pointé sur elle n'importe où? Sachez que c'est une question étrange qui vient de mieux comprendre ce que vous passez


Il essaie d'échapper aux barres obliques qui sont légitimes.


@ K0SH Je sais que c'est essayer d'échapper aux personnages mais ne pouvait pas savoir pourquoi les guillemets y sont ajoutés.


Mon journal LOGCAT Lorsque vous utilisez votre code: 01-07 23: 18: 21.490 1619-1619 / com.Example.gsonhunes D / MainActivityJson: N ° de jeton actuel: / suesjuf0a0alfr + wvizbw == lmmwtghz90yh0nboatyb / a 01-07 23:18 : 21.490 1619-1619 / com.example.gsonitunes D / MainAllityjson: {"Jeton": "/ suesjuf0a0alfr + wvizbw == \ nlmmwtgghz90yh0nboatyb / a"}


@Bnk afin que je dise si nous déclarons la chaîne directement tout fonctionne bien frère. ..


Pouvez-vous publier logcat en utilisant log.d ("MainActivityJson", "N ° de jeton actuel:" + courant actuelTenkno); Juste après String CurrentTokenno = Préférences.GetString (LoginCred_Token, ""); ?


@Bnk Token actuel Non "/ suesjuf0a0alfr + wvizbw == y9iwl1ssrue9zrqppenmna" .. Désolé pour les jetons précédents Non, il a été remplacé. Mais le problème apparaît seulement après l'avoir ajouté à JSONOBJECT .


Comme vous pouvez le constater, la valeur de SharedPreferences a déjà eu des guillemets, donc si elle est utilisée directement, elle doit être String CurrentTokenno = "\" / suesjuf0a0alfr + wvizbw == y9iwl1ssrue9zrqppenmna \ "";


Vous pouvez voir dans mon commentaire précédent N ° de jeton actuel: / suesjuf0a0alfr + wvizbw == lmmwtghz90yh0nboatyb / a (pas de guillemage) :)


Laissez-nous Continuer cette discussion en chat .


4 Réponses :


2
votes

à partir de vos commentaires et de votre logcat info, la valeur réelle obtenue de SharedPreferences code> est "/ suesjuf0a0alfr + wvizbw == y9iwl1ssrue9zrqppenmna" code> (avoir des guillemets), pas / Suesjuf0a0alfr + wvizbw == y9iwl1ssrue9zrqppenmna code>. C'est pourquoi vous avez jsontosubmit: {"jeton": "\" / suesjuf0a0alfr + wvizbw == y9iwl1ssrue9zrqppenmna \ ""} code>

update: strong> p >

Pour votre solution temporaire: jsontosubmit.addProperty ("jeton", couranteTokenno.Substring (1, courant-centenno.length () - 1)); code> p> p> blockQquote>

Je préfère la manière suivante: p> xxx pré>

Si vous souhaitez également supprimer des barres obliques, utilisez: P>

jsonToSubmit.addProperty("token", currentTokenNo.replaceAll("\"","").replaceAll("/",""));


7 commentaires

Si oui, alors comment économiser de la chaîne sur SharedPreferences sans guillemets.


Si vous pouvez consulter le fichier XML du SP, vous verrez quelque chose comme le suivant _ BCFPG5TOPZECCGXROSGA6AKNHGDFIEUKEXXMQZUZ-9ACG abc@xyz.com


Et je pense que vous devriez vérifier la valeur initiale du jeton, je veux dire que vous vérifiez le code qui génère et / ou répons le jeton


Salut! Avez-vous vérifié comme j'ai commenté?


Oui j'ai. Ma solution temporaire fonctionnera-t-elle pour l'avenir alors.


J'ai des messages dans le chat !!


Laissez-nous Continuer cette discussion dans le chat .



2
votes

Tout ce que vous entrez dans votre logcat est correct.

Vous trouverez ci-dessous quelques points et raison pour laquelle cela se passe donc:

1) Slashes inutiles ajoutées à votre jeton. Pourquoi? Parce que votre jeton contient une barre oblique (\) qui est un caractère d'échappement. Donc, il sera écrit comme double barre oblique (\\) au lieu d'une barre oblique unique (\).

2) Devis de citation inutile ajouté à votre jeton. Pourquoi? Encore une fois, votre jeton est un objet de chaîne et commence par une citation ("). Donc, il sera écrit comme \".

de sorte que l'ensemble de votre jeton change de "/ suesjuf0a0alfr + wvizbw == \ nlmmwtghz90yh0nboatyb / a" à "\" / suesjuf0a0alfr + wvizbw == \\ nlmmwtghz90yh0nboatyb / a \ "" . Mais vous n'avez pas besoin de ne pas vous inquiéter que lorsque vous obtiendrez vos données de jeton de JSONObject , vous obtiendrez toujours le même jeton que vous avez été ajouté.

Pour plus d'informations sur le caractère d'échappement, voir ici: https://docs.oracle.com/javase/tatuutoriel/java/data /Caractéristiques.html


0 commentaires

0
votes

C'est un peu de temps après avoir posté ceci, mais pourquoi ne pas utiliser org.json.jsonObject à la place?

Vous n'auriez pas besoin de faire cette suppression gênante des guillemets inutiles et de supprimer les refuges.

Sauf si vous essayez de faire quelque chose comme l'ajout YourjsonObject.tostring () dans un autre jsonObject .


0 commentaires

0
votes

J'ai pu passer au-delà de ce problème en modifiant la manière dont la chaîne d'origine a été créée, à l'aide de getasstring () au lieu de tostring () lorsque vous tirez la chaîne d'un autre JSONObject .

Lors du débogage, la chaîne citerait comme prévu jusqu'à inséré dans le nouveau JSONObject. Utilisation de la méthode de sous-chaîne ci-dessus a fonctionné jusqu'à ce que j'ai trouvé utiliser getasstring () . xxx

tandis que xxx

Ajout au cas où il aide une personne à rechercher dans ce vieux problème.


0 commentaires