如何在get请求中传递JSON对象作为查询

3phpmpom  于 2023-07-01  发布在  其他
关注(0)|答案(2)|浏览(145)

我试图将参数传递给一个url get请求,该请求要求其中一个参数是json对象。我正在使用Google Apps脚本。我得到一个无效参数异常。searchConditions参数需要json。我还需要在查询后传递一些附加参数,以指定要返回的字段。
文档中的示例如下所示:

https://theurl/search?searchConditions=[{ "Param1": "value", "Param2": "value"}]&fields=[ "Field1", "Field2", "etc"]

代码如下:

var url = "https:/theurl/search?searchConditions=";

var conditions = {
  "Param1":"value",
  "Param2":"value"
  };
  
var fields = "&fields=[\'Field1\',\'Field2\',\'etc\']";

var options = {
  "method":"Get",
  "Accept": "application/json",
  "Content-Type": "application/json",
  "muteHttpExceptions" : true
    };
   options.headers = {"Authorization": "Basic xxxxxxxxxxxxx="};

   var jsondata = UrlFetchApp.fetch(url + conditions + fields, options);
   var data = JSON.parse(jsondata.getContentText())

更新:来自文档:
搜索事件
URI https://trackerbeyond.phaseware.com:443/pro9/api/incident/search
HTTP动词GET
请求参数有两个请求参数作为URI的一部分传入; search条件和字段。
searchConditions参数这是一个搜索条件数组。请注意,定义多个条件时,必须满足所有条件才能返回事件。
此表显示了要在每个搜索条件中设置的字段。字段名描述条件类型可能的值:Exact、BeginsWith、Contains、DateRange、IsBlank、IsNotBlank、ArchiveStatus、OpenCloseStatus。FieldName要搜索的字段的名称。要获取字段的完整列表,请使用事件架构API调用。TableName字段所在的表的名称。可能的值为z_Incident、UserIncident、z_FullTextMain、Customer、UserCustomer、Contacts、UserContacts、CustomerContacts、UserCustomerContacts、CustomerProducts、CustomerSupportPackages、IncidentParts、IncidentParties、DepartmentGroupingMembers(用于在DepartmentGrouping上搜索)。如果为空,则将使用z_Incident。注意:对于CreateDate和Description字段,使用z_FullTextMain作为TableName。包含两个字段的对象; LookupTableName和LookupFieldName。SearchValue要搜索的值。EndingSearchValue在指定DateRange的ConditionType以提供结束日期时使用。OpenActive可能的值:全部、打开或活动、关闭或存档。请注意,此参数仅在添加ConditionType为OpenCloseStatus的搜索条件时适用。
示例在本示例中,第一搜索条件用于搜索等于1的DepartmentID。第二个条件是搜索“优先级3”的优先级描述。这是使用“查找”字段搜索查找的说明而不是ID的示例。第三个条件是包括开放事件和封闭事件。默认情况下,仅返回打开的事件。[ {“ConditionType”:“Exact”,“FieldName”:“DepartmentID”,“TableName”:“",“查找”:“",“SearchValue”:“% 1”,“EndingSearchValue”:“",“OpenActive”:“OpenOrActive”},{“ConditionType”:“Exact”,“FieldName”:“PriorityID”,“TableName”:“",“查找”:{“LookupTableName”:“LU_Priority”,“LookupFieldName”:“Description”},“SearchValue”:“优先级3”,“EndingSearchValue”:“",“OpenActive”:“OpenOrActive”},{“ConditionType”:“OpenCloseStatus”,“FieldName”:“",“TableName”:“",“查找”:“",“SearchValue”:“% 1”,“EndingSearchValue”:“",“OpenActive”:“All”} ]
fields参数这是要在结果中返回的字段数组。如果此参数留空,则将返回默认字段集。
从Test this API接口成功调用:[https://trackerbeyond.phaseware.com:443/pro9/api/incident/search?searchConditions= {“ConditionType”:“Exact”,“FieldName”:“StatusID”,“SearchValue”:“12”,“OpenActive”:“OpenOrActive”} ]&fields=[“CustomerName”,“CreateDate”,“AgentFullName”,“ClosedDateTime”,“StatusID”,“IncidentID”,“Description”]

ojsjcaue

ojsjcaue1#

修改要点:

  • 在GET方法中,不需要使用contentType
  • 当您想使用Accept时,请将其包含在请求头中。
  • 虽然我不太清楚你要使用的API的具体规格,但从你的问题中的The example in the documentation looks like this: https://theurl/search?searchConditions=[{ "Param1": "value", "Param2": "value"}]&fields=[ "Field1", "Field2", "etc"]来看,我认为在这种情况下,URL编码查询参数的值如何?

当以上几点反映到您的脚本中时,它会变成如下所示。

示例脚本:

var url = "https:/theurl/search";
var conditions = [{ "Param1": "value", "Param2": "value" }];
var fields = ["Field1", "Field2", "etc"];
var options = {
  "method": "get",
  "headers": {
    "Authorization": "Basic xxxxxxxxxxxxx=",
    "Accept": "application/json",
  },
  "muteHttpExceptions": true
};
var jsondata = UrlFetchApp.fetch(`${url}?searchConditions=${encodeURIComponent(JSON.stringify(conditions))}&fields=${encodeURIComponent(JSON.stringify(fields))}`, options);
var data = JSON.parse(jsondata.getContentText())

注意:

  • 在这个答案中,它假设https:/theurl/search的URL和"Basic xxxxxxxxxxxxx="的令牌可以用于您想要使用的API。请小心这个。
  • 如果以上修改没有解决您的问题,您可以提供您想要使用的API的官方文档吗?对此,我想确认一下。

参考资料:

kuhbmx9i

kuhbmx9i2#

我正在为一个项目使用相同的API,我发现文档很难理解。我可以给你捎个口信吗?

相关问题