问题描述
使用以下代码,我正在尝试为 Capability 创建新的对话帖子。但它说
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:预期为 '{' 但看到了 '�' [ 字符读取 = >>>�
function createPost(objId,post) {
objId = "313878829904";
post = "<p>MindMap:Hello from GAS.</p>"
var url = "https://rally1.rallydev.com/slm/webservice/v2.0/conversationpost/create";
var payload = {
"ConversationPost": {
"Artifact": "/portfolioitem/capability/" + objId,"Text": post
}
}
var method = "POST";
var options = optionsPost_(method,payload);
var response = UrlFetchApp.fetch(url,optionsPost_(method,options));
var content = JSON.parse(response.getContentText());
content.CreateResult.Errors.forEach(error => Logger.log(error));
}
function optionsPost_(method,payload) {
var rallyApiKey = "";
if (rallyApiKey != "") {
PropertiesService.getScriptProperties().setProperty("RallyApiKey",rallyApiKey);
} else {
rallyApiKey = PropertiesService.getScriptProperties().getProperty("RallyApiKey");
}
if (rallyApiKey == null) return null;
return {
headers: { "ZSESSIONID": rallyApiKey },payload: payload,method: method
};
}
我找不到任何问题。 能否请你帮忙? 谢谢! 彼得
解决方法
我认为根据您的错误消息,可能需要将有效负载作为 JSON 数据发送。如果我的猜测是正确的,那么下面的修改如何?
修改后的脚本:
从:return {
headers: { "ZSESSIONID": rallyApiKey },payload: payload,method: method
};
到:
return {
headers: { "ZSESSIONID": rallyApiKey },payload: JSON.stringify(payload),method: method,contentType: "application/json"
};
注意:
- 在此修改中,假设
payload
和rallyApiKey
的值是使用 API 的有效值。请注意这一点。 - 当以上修改不是您问题的直接解决方案时,您能否提供您要使用的API的官方文档?借此,我想确认一下。
参考:
,感谢您的快速响应。 与以下
var payload = {"ConversationPost":{"Artifact": "/portfolioitem/capability/"+objId,"Text": post}};
var method = "POST";
var options = optionsPost_(method,payload);
和
var options={
headers: { "ZSESSIONID": rallyApiKey },contentType:"application/json"
};
它给了我
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:预期为 '{' 但看到了 'h' [ 字符读取 = >>>h
如果我改成
var options={
headers: { "ZSESSIONID": rallyApiKey },contentType:"application/json"
};
它给了我
由于 I/O 错误,无法将输入流解析为 JSON 文档:解析错误:预期为 '}' 但看到了 ',' [ 字符读取 = >>>{"headers":{"ZSESSIONID":"_ycHaCSd2QZSf8kbkQ0R1yhjohUvSzUYas0caApHt2A"},
我使用的唯一文档是: https://rally1.rallydev.com/slm/doc/webservice/objectModel.sp#ConversationPost
,我找不到任何区别,但这实际上开始起作用了。 我相信这个问题是由错误组合引起的。我删除了一个问题,但可能会添加另一个问题。 这是一个有效的代码。
function createPost(objId,post) {
objId = '313878829908';
post = "<p>MindMap:Hello from GAS.</p>"
var url = "https://rally1.rallydev.com/slm/webservice/v2.0/conversationpost/create";
var payload = {'ConversationPost':{'Artifact': '/portfolioitem/capability/'+objId,'Text': post}};
var method = 'POST';
//var options = optionsPost_(method,payload);
var response = UrlFetchApp.fetch(url,optionsPost_(method,payload));
var content = JSON.parse(response.getContentText());
content.CreateResult.Errors.forEach(error => Logger.log(error));
}
function optionsPost_(method,payload) {
var rallyApiKey = "";
if (rallyApiKey != "") {
PropertiesService.getScriptProperties().setProperty("RallyApiKey",rallyApiKey);
} else {
rallyApiKey = PropertiesService.getScriptProperties().getProperty("RallyApiKey");
}
if (rallyApiKey == null) return null;
var options={
'headers': {'ZSESSIONID': rallyApiKey },'payload': JSON.stringify(payload),'method': method,'contentType':'application/json'
};
return options;
}
感谢田池的帮助。我真的很感激。