0
votes

Comment convertir un JSON imbriqué en un objet

Je dois envoyer un objet comme paramètre corporel à une demande postale. Mon objet est en train d'être créé à partir d'un Json imbriqué et je ne peux pas le faire travailler jusqu'à présent.

J'ai fait cela assez facile dans JavaScript, mais je n'ai pas trouvé la façon de le faire dans Dart / Flutter.

la méthode "conventionnelle" que j'ai faite précédemment est aussi simple que: xxx

en utilisant la même structure dans DART / PLUTTTTTTER, je reçois ci-dessous l'erreur < / p>

[Erreur: flutter / ui / ui_dart_state.cc (148)] Prete non gérée: Tapez '_internallinkedhashmap' n'est pas un sous-type de type 'String' dans Type Cast

J'ai essayé avec mappe , mappe , en utilisant un modèle pour mes données ....

si j'envoie le même JSON mais sans "facturation" et "expédition" (pas de JSON non imbriqué) Ça fonctionne.


2 commentaires

Dupliqué possible de Convertir JSON en POJO (objet) similaire à Android en flutter


Le problème n'a probablement rien à voir avec la conversion de Json. Cela ressemble plus à une mauvaise structure de charge utile que le serveur n'accepte pas.


3 Réponses :


1
votes

dans JSON, il ne devrait y avoir de virgules qu'entre les valeurs.

var data = {
  "email": "qwe@qwe.com",
  "password": "123",
  "first_name": "qweqwe",
  "billing": {
    "email": "qwe@qwe.com",
    "phone": "321654978"
  },
  "shipping": {
    "first_name": "qweqwe"
  }
}


0 commentaires

3
votes

La réponse de tri Si vous souhaitez télécharger votre fichier data ​​code> est de le convertir en une chaîne comme: xxx pré>

Comme discuté dans les commentaires dont vous pourriez avoir besoin. Pour envelopper l'intégralité du contenu dans une propriété code> code>. Vous pouvez essayer ceci: p> xxx pré>

tl; dr strong> p>

C'est toujours une bonne idée de créer un modèle. Donc, cela pourrait être votre utilisateur code> modèle: p> xxx pré>

Il dispose d'un constructeur statique qui est pratique pour créer une instance de cet utilisateur Code> d'un morceau de Json décodé comme vous avez. P>

Vous pouvez maintenant aller de l'avant et utiliser ce modèle dans votre code, comme: p> xxx pré>

Il serait encore plus propre de créer des modèles pour les deux Facturation code> et peut-être aussi expédition code>. p>

Voici un exemple complet qui comprend également les méthodes tojson () code> pour générer JSON à partir d'un modèle analysé: p> xxx pré>

Et c'est ainsi que vous pouvez l'utiliser: P>

var data = {
  "email": "qwe@qwe.com",
  "password": "123",
  "first_name": "qweqwe",
  "billing": {
    "email": "qwe@qwe.com",
    "phone": "321654978",
  },
  "shipping": {
    "first_name": "qweqwe",
  }
};


var user = User.fromJson(data);

print("Users Email is ${user.billing.email}");
print("Shipping name is ${user.shipping.name}");

var jsonString = json.encode(user.toJson()); // upload this as body to your server.
print("Json String is " + jsonString);


13 commentaires

Lorsque j'utilise le modèle en tant que paramètre, je reçois Body de demande non valide "instance de" utilisateur "" ce dont j'ai besoin est de pouvoir envoyer l'objet en tant que paramètre corporel, pas seulement l'analyser ... i 'M coincé pendant quelques jours sur ceci ... je suis à court d'idées en ce moment


Comment l'utilisez-vous comme paramètre?


Dans ma question, vous devez avoir besoin de cela pour envoyer le jeu JSON "converti" en tant que paramètre pour une demande de post http


Oh oui je suis désolé. Doit avoir mal compris votre question. S'il vous plaît jeter un oeil à mon édition. Il a maintenant intégré la génération d'une chaîne JSON pour votre corps de poste.


Regardez le haut de ma réponse. Peut-être que c'est ce que vous cherchez.


J'ai oublié de mentionner que chaque fois que j'ai essayé avec json.encode, je n'ai aucune erreur de Dart / Flutter, mais l'erreur vient de ma réponse de l'API. {Code: Rest_Missing_Callback_Param, Message: Parámetro (s) Que Falta (N): Email, Mot de passe, Données: {Statut: 400, paramètres: [Email, Mot de passe]}}


On dirait que votre serveur s'attend à une structure JSON différente. Pouvez-vous publier un code de serveur qui analyse votre demande de post entrant?


J'essaie simplement d'envoyer ces données à l'aide d'une API WOOCOMMERCE. C'est tout à fait connu. Je l'ai déjà fait, sans aucun problème, en JavaScript, je viens d'envoyer les données "comme c'est". Pas de conversion ...


Woocommerce n'est pas content de votre charge utile. La seule chose à laquelle je puisse penser, c'est que si vous le faites dans JS, vous pouvez envelopper l'objet entier dans un objet de données.


Encore une fois. S'il vous plaît jeter un coup d'œil au sommet de ma réponse. Je l'ai édité une fois de plus.


Il n'y a pas de modification lors de l'emballage dans un objet de données. J'ai déjà testé l'ajout d'en-têtes et rien. Je ne sais tout simplement pas quoi d'autre à essayer d'autre. Il semble que Google ait des corrections mineures à faire concernant ce sujet. Cela devrait être aussi simple que d'envoyer l'objet JSON tel quel ...


Je crois que votre problème n'est pas lié à la fléchette ni à la flutter. L'erreur que vous voyez est clairement une indication que votre instance WOOCOMMERCE n'est pas satisfaite de la structure de votre charge utile. Je vous suggère de créer un nouveau sujet dans une section Woocommerce de Stackoverflow.


J'ai fait exactement la même application à Ionic et ça marche bien et j'ai fait exactement ce que j'ai fait. Je ne sais tout simplement pas pourquoi je me débats avec cela dans le flutter comme cela devrait être un processus simple ...



2
votes

Je pense que les autres réponses peuvent être (grandement) sur-compliquant cela. Quelle que soit la langue que vous utilisez, pour envoyer JSON à un serveur, vous devez envoyer les données sous forme de string em>, avec un type application / json code> type de contenu. JSON.ENCODE CODE> Poignée Déjà des cartes imbriquées, vous n'avez donc pas besoin de faire quelque chose de spécial ... du tout:

// Replace the "..." with the rest of your data.
var data = {"email": "qwe@qwe.com", "password": "123", ...}

// `asJson` is a String.
var asJson = json.encode(data);

// Send it
var response = await client.post('example.com/...', body: asJson, headers: {'content-type', 'application/json'});


1 commentaires

Qu'entendez-vous par "échec"? Avez-vous une erreur d'exécution ou le serveur lui-même vous envoie-t-il une erreur? Il n'y a pas vraiment un moyen de savoir si vous ne dites pas ...