【问题标题】:Shopify product creation 422: "You need to add option values for [option name]"Shopify 产品创建 422:“您需要为 [选项名称] 添加选项值”
【发布时间】:2016-12-06 00:18:31
【问题描述】:

更新:已解决。一个编码错误导致 variants 被包装在一个附加列表中,从而产生了一个语法有效但语义无效(对于 Shopify)的 JSON 对象。


我正在尝试在 Shopify 上创建具有多个选项和多个变体的产品。一切都很顺利,除了我在产品选项上被绊倒了。

我发布的 JSON 的相关部分如下:

"options":[
  {
     "position":1,
     "name":"Style"
  },
  {
     "position":2,
     "name":"Size"
  },
  {
     "position":3,
     "name":"Color"
  } 

每个变体看起来像这样:

{
    "price":"##.##",
    "option2":"S",
    "compare_at_price":"##",
    "weight_unit":"lb",
    "option3":"Black",
    "old_inventory_quantity":1,
    "option1":"Men's Premium T-Shirt",
    "inventory_management":null,
    "weight":0.0,
    "title":"Men's Premium T-Shirt / S / Black",
    "requires_shipping":true,
    "inventory_quantity":1,
    "fulfillment_service":"manual"
 },

Here's a link to the entire JSON I'm attempting to POST.

当我将此 JSON 发布到 https://STORE_NAME.myshopify.com/admin/products.json 时,我收到 422 状态代码和以下错误消息:

{'errors': {'base': ['You need to add option values for Size', 'You need to add option values for Color']}}

我不确定我发送的 JSON 有什么问题,我希望能得到一些建议或指向正确方向的指针。


我是这样到达现在的位置的:

  • 尝试在字典中没有 "options" 条目的情况下进行 POST,给了我一个 'The variant 'Men's Premium T-Shirt' already exists' 形式的错误;对此进行研究后,我介绍了 "options" 条目。
  • 我一开始只使用"options": {"name": "Style", "name": "Color", "name": "Size"},但这创建了一个只有一个变体的产品 - “默认标题”。
  • 删除样式选项会给我一个关于颜色的错误消息。删除大小也会创建一个变体“默认标题”产品。

最后一点特别让我怀疑某种语法错误 - 括号中的第一个选项没有正确关闭,读取接下来的两个选项作为它的选项值,然后接下来的两个被遗漏寒冷。但是我已经通过解析器和格式化程序运行了这个 JSON,它似乎已经检查过了。此外,在谷歌上搜索 Shopify "You have to add option values for" 会准确返回 0 个匹配项,而引号保持不变。

锦上添花的是,Shopify 的官方文档似乎甚至不需要“选项”块 - 请参阅“创建具有多个产品变体的新产品”here - 但 Shopify 的 API 论坛和其他地方的人们表示这是绝对必要的。

我觉得我在这里犯了一个简单的错误,但我一辈子都找不到它。任何指针将不胜感激。

【问题讨论】:

    标签: json python-requests shopify


    【解决方案1】:

    其中一种变体是否可能缺少option3options2 属性?以下是具有多种选择的产品的最小示例:

    {
        "product": {
            "title": "Cool shirt",
            "variants": [{
                "price": "4.00",
                "option1": "big",
                "option2": "mauve"
            }, {
                "price": "2.00",
                "option1": "big",
                "option2": "iridescent"
            }, {
                "price": "5.00",
                "option1": "small",
                "option2": "mauve"
            }, {
                "price": "1.00",
                "option1": "small",
                "option2": "iridescent"
            }],
            "options": [{
                "name": "Size",
                "position": 1
            }, {
                "name": "Color",
                "position": 2
            }]
        }
    }
    

    编辑:感谢您发布示例。您应该在 {"product": ... } 对象中发送产品数据。此外,您的样本中的变体数据似乎有太多括号。尝试在我的示例中仅将变体包含在一组方括号中。

    【讨论】:

    • 我手动检查了每个变体;每一个都有 option1option2option3 的正确值。另外,我注意到您没有为 options 块中的选项指定值;我认为那没有必要,那么?
    • 对,Shopify 可以自动生成。您介意发布您提出的请求的整个 JSON 吗?
    • 我添加了一个指向整个 JSON 的 pastebin 的链接,并从 options 块示例中删除了值(错误仍然存​​在)。
    • 好的,看起来方括号太多了 - 更新了我的答案。
    • 快,关于product:{} 中的封装点是我忘记在粘贴中解决的问题;我在生成粘贴块的函数之外添加了该封装。关于你的第二点,我很高兴地报告圆满成功;该代码现在按预期工作。 Python 语句末尾的逗号错位导致变体列表被转换为元组,从而将其包装在一个无关的列表中。非常感谢您指出这一点,我不知道我会注意到这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多