你好,
我有一個在線應用程序,可以通過提交帶有適當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");