2017-08-24 1 views
-1

J'utilise React et fetch, et j'essaye d'envoyer une chaîne JSON au service web d'un client, ils attendent un objet comme celui-ci:Créer un objet JSON Sans les guillemets au début et à la fin de la chaîne

{ 
    "id":"1", 
    "plan_id":"6", 
    "plan_start_date":"2017-08-02", 
    "months":"1", 
    "extra_hours":"4", 
    "attendees":"1", 
    "mails":"", 
    "shopping_cart_id":"0" 
} 

Cependant, chaque fois que je l'utilise JSON.stringify() pour générer la chaîne JSON, le résultat est quelque chose comme ceci:

"{ 
    "id":"1", 
    "plan_id":"6", 
    "plan_start_date":"2017-08-02", 
    "months":"1", 
    "extra_hours":"4", 
    "attendees":"1", 
    "mails":"", 
    "shopping_cart_id":"0" 
}" 

Ainsi, lorsque la demande est envoyée, je reviens une erreur indiquant que l'objet n'est pas valide.

Existe-t-il un moyen d'envoyer l'objet comme sur le premier exemple? J'ai essayé de construire manuellement l'objet, mais je ne peux pas obtenir les noms de la clé pour rester entre guillemets.

EDIT: Le code pour l'appel est ici:

addToCart(plan) { //Plan is the object with the previous example's structure 
     fetch("http:ClientWS", { 
      method: "POST", 
      body: JSON.stringify(plan) //Produces the "{}" issue 
     }) 
     .then(response => response.json()) 
     .then(json => { 
      //Read the response info, here it tells me that the value for 'id' is invalid 
      console.log(json.datos); 
     }).catch(function(ex) { 
      console.log(ex); 
     }); 
    } 
+0

Vous pourriez vouloir montrer du code. Stringifier fonctionne très bien. – john

+0

Vous devrez le construire manuellement – fungusanthrax

+0

'JSON.stringify (" abc ")' produira '" abc "' (entre guillemets dans le cadre de la chaîne générée). Peut-être qu'avec des réactions, vous pouvez simplement passer un objet comme le corps, sans d'abord le sérialiser vous-même? – john

Répondre

0

C'est parce que JSON.stringify prend votre objet et délivre une variable de chaîne par concaténer toutes les propriétés et valeurs ensemble et insérer des séparateurs . Et une chaîne est affichée entre guillemets, encore une fois parce que c'est une chaîne. Ce n'est plus un objet. Lorsque vous l'envoyez au serveur, le serveur le voit comme une seule valeur de chaîne. Le fait que le contenu de la chaîne ressemble à JSON n'est pas pris en compte.

Vous savez que les objets JSON et JavaScript sont essentiellement la même chose? Le JSON stringifié que vous pouvez voir est juste une version lisible par l'homme de la structure de l'objet. Il s'avère également être un format pratique dans lequel pour sérialiser des objets (de toutes les langues non seulement JS) pour la transmission dans une requête HTTP (ou le stockage dans un fichier ou une base de données, entre autres utilisations). En fait, lorsque vous envoyez votre objet au serveur, faites-le - envoyez l'objet. Si vous le faites via ajax, le code JS que vous utilisez sera généralement en série pour la transmission en votre nom. Vous devrez peut-être définir l'en-tête de type de contenu correct. Cet objet sérialisé dans le corps de la requête HTTP finira par ressembler beaucoup à la sortie de JSON.stringify (si vous l'avez vu dans l'onglet réseau de votre navigateur, par exemple), sauf que ce ne sera pas une chaîne, et le serveur l'interpréter comme un objet contenant plusieurs propriétés.

+0

Oui, je sais, mais j'ai aussi essayé d'envoyer l'objet sans le raccourcir, ça donne toujours la même erreur. – Jahl

+0

et quelle erreur est-ce, exactement? Quel code de réponse HTTP obtenez-vous? Et quel message exact? – ADyson

+0

Il s'agit d'une réponse personnalisée du service Web du client, indiquant que la valeur de 'id' n'est pas correcte. Le code de réponse HTTP est juste un 201. – Jahl

0

JSON.stringify() ne pas ajouter des guillemets autour de la sortie. Si vous voyez ces citations supplémentaires, je dirais que cela implique que l'erreur est ailleurs.

+0

pense qu'il pourrait avoir quelque chose à faire avec React, car cela fonctionne comme prévu quand on le fait à partir d'un HTML normal avec $ .ajax() – Jahl