SharePoint REST API无法返回以数字开头的字段,如何获取这类字段?
我之前处理过一模一样的场景!SharePoint的OData端点对不符合标准标识符规则的字段(比如以数字开头、带空格的自定义字段)有特殊处理——默认返回的结果里不会包含这类字段,直接用显示名称调用也会无效。给你两个实用的解决办法:
方法1:通过字段内部名称请求
SharePoint会为每个字段生成一个符合OData规范的内部名称,比如“1st Line Review Outcome”的内部名称可能是_x0031_st_x0020_Line_x0020_Review_x0020_Outcome(具体编码取决于字段创建时的规则)。你可以先调用字段列表API拿到这个内部名称:
$.ajax({ url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('NXE Action Plan Tracker')/fields?$filter=Title eq '1st Line Review Outcome'", method: "GET", headers: { "Accept": "application/json; odata=verbose;" }, success: function (data) { const internalName = data.d.results[0].InternalName; console.log("字段内部名称:", internalName); // 用内部名称请求items fetchItemsWithSpecialField(internalName); }, error: function (err) { console.error("获取字段信息失败:", err); } }); function fetchItemsWithSpecialField(internalName) { $.ajax({ url: `${_spPageContextInfo.webAbsoluteUrl}/_api/web/lists/getbytitle('NXE Action Plan Tracker')/items?$select=Title,${internalName}`, method: "GET", headers: { "Accept": "application/json; odata=verbose;" }, success: function (data) { console.log("包含目标字段的数据:", data); // 访问字段值:data.d.results[0][internalName] }, error: function (err) { console.error("获取列表项失败:", err); } }); }
方法2:直接用OData特殊语法引用显示名称
如果你不想先查询内部名称,也可以在$select参数里用OData的特殊引用方式——把字段名放在单引号+方括号里,并且对特殊字符做URL编码:
$.ajax({ // 注意:%5B是[的URL编码,%20是空格,%27是'的编码 url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('NXE Action Plan Tracker')/items?$select=Title,%5B%271st%20Line%20Review%20Outcome%27%5D", method: "GET", headers: { "Accept": "application/json; odata=verbose;" }, success: function (data) { console.log("包含目标字段的数据:", data); // 访问字段值时要使用带单引号的键名 console.log("字段值示例:", data.d.results[0]["'1st Line Review Outcome'"]); }, error: function (err) { console.error("请求失败:", err); } });
关键提示
- 必须指定
$select参数:默认情况下,SharePoint REST API只返回Title、ID等核心字段,不会包含自定义字段,不管名称是否合规。 - 方法2的返回字段名会保留单引号和方括号的格式,所以访问时要对应使用带单引号的键名。
内容的提问来源于stack exchange,提问作者joshmk
相关产品推荐
相关产品推荐

