Error de cadena no terminada JSON al enviar solicitud HTTPHola,
Tengo una aplicación en línea de la que puedo solicitar extracciones de datos enviando una solicitud HTTP con los campos JSON apropiados.
Un campo (field2) dentro de mi carga útil JSON es un tipo de lista y puede contener uno o más elementos. El problema al que me enfrento es que mi script JMP funciona solo si esta lista tiene un solo elemento y no si tiene dos o más.
El error que recibo es:
"error":"com.google.gson.stream.MalformedJsonException: Unterminated string
Lo que me confunde es que si hago la misma solicitud HTTP con la misma carga JSON usando la biblioteca de solicitudes de Python, la solicitud se realiza sin problemas.
Parece que tiene que ver con cómo JMP está formateando el JSON antes de que envíe la solicitud.
¿Algunas ideas?
A continuación se muestra una versión simplificada de mi código para referencia.
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: Error de cadena no terminada JSON al enviar solicitud HTTPSin conocer los valores que está utilizando en value1, value2a, value2b, value3, definitivamente no puedo decir cuál es el problema. Se deben escapar algunos caracteres en JSON (como \ n, \ t, ", ', etc.).
Si es posible, puede usar:
Write(payloadJSON || "\!n");
después de concatenar todos los valores de payloadJSON y ver si se produce un JSON válido al copiar / pegar en un analizador JSON como el complemento JSON Editor en línea de Chrome.
A menos que sea un JSON muy simple, normalmente uso las matrices asociativas JSL y uso AsJSONExpr para formar el JSON. Se escapa por mí. (El mensaje JSON también tomará una matriz asociativa)
En su caso (el que no funciona) lo escribiría así para asegurarme de que todas las citas se manejan para 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");