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. p>
la méthode "conventionnelle" que j'ai faite précédemment est aussi simple que: p> 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 P>
BlockQuote> J'ai essayé avec si j'envoie le même JSON mais sans
mappe mappe "facturation" code> et "expédition" code> (pas de JSON non imbriqué) Ça fonctionne. P> p>
3 Réponses :
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"
}
}
La réponse de tri Si vous souhaitez télécharger votre fichier 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> C'est toujours une bonne idée de créer un modèle.
Donc, cela pourrait être votre Il dispose d'un constructeur statique qui est pratique pour créer une instance de cet utilisateur Vous pouvez maintenant aller de l'avant et utiliser ce modèle dans votre code, comme: p> Il serait encore plus propre de créer des modèles pour les deux Voici un exemple complet qui comprend également les méthodes Et c'est ainsi que vous pouvez l'utiliser: P> data code> est de le convertir en une chaîne comme: utilisateur code> modèle: p> Code> d'un morceau de Json décodé comme vous avez. P> Facturation code> et peut-être aussi expédition code>. p> tojson () code> pour générer JSON à partir d'un modèle analysé: 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);
Lorsque j'utilise le modèle en tant que paramètre, je reçois Body de demande non valide "instance de" utilisateur "" code> 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]}} Code>
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 ...
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'});
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 ...
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.