こんにちは、
適切なJSONフィールドを使用してHTTPリクエストを送信することで、データ抽出をリクエストできるオンラインアプリケーションがあります。
JSONペイロード内の1つのフィールド(field2)はリストタイプであり、1つ以上のアイテムを含めることができます。私が直面している問題は、このリストに単一の項目がある場合にのみJMPスクリプトが機能し、2つ以上の項目がある場合には機能しないことです。
私が受け取るエラーは次のとおりです。
"error":"com.google.gson.stream.MalformedJsonException: Unterminated string
私を混乱させるのは、Pythonのリクエストライブラリを使用して同じJSONペイロードで同じHTTPリクエストを行うと、リクエストが問題なく通過するということです。
リクエストを送信する前にJMPがJSONをフォーマットする方法に関係しているようです。
何か案は?
以下は、参照用のコードの簡略版です。
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">
value1、value2a、value2b、value3で使用している値がわからないため、問題が何であるかを明確に言うことはできません。JSONの一部の文字はエスケープする必要があります(\ n、\ t、"、'など)。
可能であれば、次を使用できます。
Write(payloadJSON || "\!n");
payloadJSONのすべての値を連結し、ChromeのJSON Editor OnlineプラグインなどのJSONパーサーにコピー/貼り付けして有効なJSONが生成されるかどうかを確認した後。
非常に単純なJSONでない限り、通常、JSL連想配列を使用し、AsJSONExprを使用してJSONを形成します。それは私のために逃げます。(JSONメッセージは連想配列も取ります)
あなたの場合(動作しないもの)、このように書いて、すべての引用が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");