Erreur de chaîne non terminée JSON lors de la soumission d'une demande HTTPBonjour,
J'ai une application en ligne à partir de laquelle je peux demander des extractions de données en soumettant une demande HTTP avec les champs JSON appropriés.
Un champ (champ2) dans ma charge utile JSON est un type de liste et peut contenir un ou plusieurs éléments. Le problème auquel je suis confronté est que mon script JMP ne fonctionne que si cette liste contient un seul élément et non s'il en contient deux ou plus.
L'erreur que je reçois est:
"error":"com.google.gson.stream.MalformedJsonException: Unterminated string
Ce qui m'embrouille, c'est que si je fais la même demande HTTP avec la même charge utile JSON en utilisant la bibliothèque de demandes de Python, la demande passe sans problème.
Il semble que cela puisse avoir à voir avec la façon dont JMP met en forme le JSON avant d'envoyer la demande.
Des idées?
Ci-dessous est une version simplifiée de mon code pour référence.
url = "http://www.example_url.com/request";
my_username = "username";
timeout_minutes = 2;
var_field1 = "\!"value1\!"";<BR />
<FONT color="#FF0000"><STRONG><FONT color="#339966">var_field2 = "\!"value2a\!""; //works<BR /><BR /></FONT>//var_field2 = "\!"value2a\!", \!"value2b\!""; //does not work<BR /></STRONG></FONT>
var_field3 = "\!"value3\!"";
payloadJSON = "{\!"test\!":{\!"field1\!":" || var_field1 || ",\!"field2\!":[" || var_field2 || "],\!"field3\!":[" || var_field3 || "]}}";
request = New HTTP Request(
URL( url ),
Method( "POST" ),
Timeout(timeout_minutes*60),
Headers
(
{
"header_field1": "header_value1",
"header_field2": "header_value2"
}
),
Username(my_username),
JSON(payloadJSON)
);
data = request << Send();</CODE></P><P><CODE class=" language-jsl">
Re: Erreur de chaîne non terminée JSON lors de la soumission d'une demande HTTPNe connaissant pas les valeurs que vous utilisez dans value1, value2a, value2b, value3, je ne peux pas dire définitivement quel est le problème. Certains caractères dans JSON doivent être échappés (comme \ n, \ t, ", ', etc.).
Si possible, vous pouvez utiliser:
Write(payloadJSON || "\!n");
après avoir concaténé toutes les valeurs de payloadJSON et voir si un JSON valide est produit par copier / coller dans un analyseur JSON comme le plug-in JSON Editor Online de Chrome.
Sauf s'il s'agit d'un JSON très simple, j'utilise généralement des tableaux associatifs JSL et j'utilise AsJSONExpr pour former le JSON. Il fait l'évasion pour moi. (Le message JSON prendra également un tableau associatif)
Dans votre cas (celui qui ne fonctionne pas), je l'écrirais comme ceci pour vous assurer que tous les devis sont traités pour JSON
var_field1 = "\!"value1\!"";
var_field2 = {"\!"value2a\!", \!"value2b\!""};
var_field3 = "\!"value3\!"";
fields = [=>];
fields["field1"] = var_field1;
fields["field2"] = var_field2;
fields["field3"] = var_field3;
payloadJSON = [=>];
payloadJSON["test"] = fields;
payloadJSON = asJSONExpr(payloadJSON);
Write(payloadJSON || "\!n");