You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SharePoint RestAPI更新列表图片列报错:期望PrimitiveValue/StartObject节点

解决SharePoint REST API更新图片列的JSON格式错误

你的错误根源在于图片列的请求体格式完全不符合SharePoint REST API的要求:

  • 你用数组[]包裹了一个转义的JSON字符串,但SharePoint要求图片列的值是一个单独的JSON对象(而非数组)
  • 不需要把对象序列化成字符串,直接用Swift字典表示即可

修正后的代码

重点修改请求体的image3字段,其他部分保持不变:

// 修正后的请求体
let body: [String: Any] = [
    "__metadata": [
        "type":"SP.Data.TestListListItem"
    ],
    "image3": [
        "serverRelativeUrl": "/sites/{siteName}/Lists/TestList/Attachments/20/Reserved_ImageAttachment_testImage.jpg", // 注意补全文件后缀
        "type": "thumbnail"
    ]
]

var dataBody = Data()
do {
    dataBody = try JSONSerialization.data(withJSONObject: body, options: [])
} catch {
    print("error")
    return
}

// 注意:urlString需要补全完整的站点前缀,比如 https://yourtenant.sharepoint.com/sites/{siteName}/...
let urlString = "https://yourtenant.sharepoint.com/sites/{siteName}/_api/web/lists/GetByTitle('TestList')/items(20)"

guard let url = URL(string: urlString) else {
    print("Invalid URL")
    exit(1)
}
var request = URLRequest(url: url)

request.httpMethod = "POST"
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
request.setValue("application/json;odata=verbose", forHTTPHeaderField: "Accept")
request.setValue("application/json;odata=verbose", forHTTPHeaderField: "Content-Type")
request.setValue("*", forHTTPHeaderField: "If-Match")
request.setValue("MERGE", forHTTPHeaderField: "X-HTTP-Method")
request.setValue(formDigestValue, forHTTPHeaderField: "X-RequestDigest")
request.httpBody = dataBody

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
    if let error = error {
        print("Error: \(error)")
        return
    }
    
    if let data = data {
        do {
            let json = try JSONSerialization.jsonObject(with: data, options: [])
            print("Response: \(json)") // 打印响应方便调试
        } catch {
            print("Error parsing JSON: \(error)")
        }
    }
}
task.resume()

额外注意事项

  1. 文件后缀:确保serverRelativeUrl里的文件名包含正确的后缀(如.jpg/.png),否则SharePoint无法识别为图片文件
  2. 类型名称验证:确认__metadata.type的SP.Data.TestListListItem是正确的——可以通过发送GET请求到列表项接口,查看返回的__metadata.type字段值
  3. URL完整性:urlString必须是完整的HTTPS路径,不能省略站点前缀

内容的提问来源于stack exchange,提问作者Gura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:20:11