-1
votes

Convertir une chaîne en un objet JSON

Je travaille avec l'API Microsoft Translator et j'essaie de convertir la réponse en un objet JSON pour obtenir la langue détectée.

Ceci est la chaîne de réponse p> xxx pré>

i Besoin de la première "langue": "de" p>

J'ai déjà essayé de convertir avec newtonsoft jobject.pajarse () mais il fonctionne p>

Voici comment la chaîne ressemble à Console: p> xxx pré>

et cette erreur est l'erreur imprimée par jobject.parse (string); p> xxx pré>

EDIT: p>

Ceci est le HTTPRequest La chaîne JSON provient de: p> xxx pré>

et j'essaie ensuite de travailler avec la réponse: p>

string json = TranslateText(text);

JArray jArray = JArray.Parse(json);

string firstLanguage = jArray[0]["language"].ToString();


7 commentaires

"J'ai déjà essayé de convertir avec Newtonsoft Jobject.Parse () mais la citation est fausse." Qu'est-ce que ça veut dire?


Quel est le message d'erreur à la suite de jobject.parse ()


Il semble que vous puissiez remplacer " et " avec un devis régulier char " puis utilisez jsonconvert


Ceux-ci ressemblent à des citations de fantaisie / inclinées qui ne seront pas valables JSON


Les devis fantaisistes étaient de ma faute, édité la chaîne d'origine


Et ces backslashes en fait dans le JSON, ou est-ce que ce n'est que ce que vous voyez dans le débogueur? (Que voyez-vous si vous l'imprimez à la console?)


Vous ne pouvez pas utiliser jobject.parse pour cela car la racine ici est une matrice, pas un objet, comme étant évident par la racine [...] . Vous pouvez utiliser jtoken.parse , mais vous pouvez aussi bien utiliser jsonconvert.deserializeObject car Marco a montré dans sa réponse.


3 Réponses :


1
votes

Essayez de cette façon: xxx

valeur linguistique:

"de"


0 commentaires

2
votes

Utiliser le JSONCONVERT.DESERialize Méthode pour désérialiser.

Depuis que vous essayez de désérialiser dans un Jobject, cela ne désérialisera pas directement, car votre chaîne JSON contient un tableau, le convertissez donc d'abord une liste à une liste Do un .firstambordfault () pour savoir la valeur de la langue de la langue . xxx


0 commentaires

1
votes

Vous êtes presque proche de Jobject ,

mais votre JSON n'est pas un objet, c'est un tableau d'objet afin que vous ayez besoin de jarray pour l'analyser avec succès. < / p>

1) Analysez-le à JARRAY

2) En interrogeant sur JARRAY Vous pouvez obtenir la première langue à l'aide de l'index 0. < / p> xxx

sortie: (du débogueur)

 Entrez la description de l'image ici


12 commentaires

Cela devrait fonctionner bien merci. Il suffit de résoudre ce problème que ma chaîne JSON est un retour d'une méthode envoiant un poste http, donc j'ai besoin d'attendre le résultat car la chaîne est null autrement.


Ok, mais qu'est-ce que attendre signifie ici => J'ai donc besoin d'attendre le résultat car la chaîne est null sinon . Est-ce que tu veux dire async attendre?


Si je "jarray = jarray.parse (jsonstring);" Je reçois toujours une "référence d'objet non définie sur une instance d'objet." - Erreur. Mais la chaîne JSON est là parce que je peux l'imprimer avant ..


Vous s'il vous plaît copier mon code car il se trouve sur le nouveau fichier de classe. Et laissez-moi savoir si cela fonctionne ou non ou laissez-moi savoir comment vous intégrez mon code à votre fin.


J'ai intégré votre code, mais je n'attribuai pas la chaîne JSON via le code dur, car je reçois le JSON comme réponse d'un HTTPRequestMessage. Si j'ignore la chaîne JSON comme vous, cela fonctionne.


Oh, alors s'il vous plaît ajouter votre réponse httpRequestMessage à votre message, donc je vais jeter un oeil dessus


Pourriez-vous me montrer comment votre JSONResponse en ajoutant un point d'arrêt et un débogage.


Je l'ai imprimé et c'est la chaîne exacte que vous avez utilisée dans votre réponse


Oh, je pense que je l'ai eu quel est le problème. Permettez-moi savoir quel Json avez-vous reçu dans JSONResponse car dans votre message, il y a 2 Jsons différents et j'ai utilisé 1ère une et pourrait être votre HTTPequestMessage Rends vous 2ND JSON


Oh .. Ouais .. c'est le 2nd un .. Désolé: D


Merci beaucoup pour votre temps. Je vais essayer d'améliorer mes questions la prochaine fois.


Si la réponse vous aidez ensuite à marquer la tique sur le côté gauche de la réponse pour le rendre vert et uppote en cliquant sur la flèche :)