你好,
我有一个在线应用程序,可以通过提交带有适当JSON字段的HTTP请求来请求数据提取。
我的JSON有效负载中的一个字段(field2)是一种列表类型,可以包含一个或多个项目。我面临的问题是,仅当此列表包含单个项目时,我的JMP脚本才能运行,而如果包含两个或多个项目,则JMP脚本不起作用。
我收到的错误是:
"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的所有值后,查看是否通过复制/粘贴到JSON分析器(例如Chrome的JSON Editor Online插件)中生成了有效的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");