向Shopify发送JSON数组时HTTP请求出错,请求协助排查
问题排查与解决方案
核心问题1:请求体缺少外层blog包裹
Shopify Admin REST API要求创建博客的POST请求体必须将所有参数包裹在blog对象内,你的代码直接序列化Blog结构体,生成的JSON没有外层blog键,导致API无法识别必填参数。
核心问题2:BlogMeta结构体缺少JSON字段标签
BlogMeta结构体字段首字母大写,json.Marshal会将字段名序列化为大写开头(比如Key变成"Key"),但Shopify API要求元字段的字段名是小写格式("key"、"value"等),格式不匹配会导致元字段参数无效。
修复后的代码示例
修正结构体定义
type BlogRequest struct { Blog Blog `json:"blog"` } type Blog struct { Title string `json:"title"` Template_suffix string `json:"template_suffix"` Metafields []BlogMeta `json:"metafields"` } type BlogMeta struct { Key string `json:"key"` Value string `json:"value"` Type string `json:"type"` Namespace string `json:"namespace"` }
修正请求序列化逻辑
blog := Blog{ Title: fileNameWithoutExtSliceNotation(doc.Name()), Template_suffix: "hit_parader_issue_template", Metafields: []BlogMeta{ { Key: "filter_tag_list", Value: "Popular", Type: "single_line_text_field", Namespace: "global", }, }, } // 将博客数据包裹到外层结构中 blogReqBody := BlogRequest{Blog: blog} blogJSON, err := json.Marshal(blogReqBody) if err != nil { // 处理序列化错误 } blogReq, err := http.NewRequest("POST", newBlogQuery, bytes.NewBuffer(blogJSON)) blogReq.Header.Add("X-Shopify-Access-Token", TOKEN) blogReq.Header.Add("Content-Type", "application/json") resp1, err := client.Do(blogReq)
额外验证建议
- 序列化后打印
blogJSON内容,确认格式符合要求,正确示例:{ "blog": { "title": "你的博客标题", "template_suffix": "hit_parader_issue_template", "metafields": [ { "key": "filter_tag_list", "value": "Popular", "type": "single_line_text_field", "namespace": "global" } ] } } - 确认
newBlogQuery的URL格式正确,需匹配Shopify API端点规范(例如https://{shop}.myshopify.com/admin/api/2022-10/blogs.json)
内容的提问来源于stack exchange,提问作者Sp3LLingzz
相关产品推荐
相关产品推荐

