Shopify产品创建422:“您需要为[选项名称]添加选项值”

时间:2016-12-06 00:18:32

标签: json python-requests shopify

更新:已解决。编码错误导致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"},但这创建了一个只有一个变体的产品 - “默认标题”。
  • 删除样式选项会给我一条关于Color的错误消息。删除大小也会创建单变量“默认标题”产品。

最后一点特别让我怀疑某种语法错误 - 包含第一个选项未正确关闭的包围,将下两个选项作为其选项值读取,然后将下两个选项省略感冒了。但是我通过解析器和格式化程序运行了这个JSON,它似乎已经结束了。此外,Google Shopify "You have to add option values for"的Google搜索确切返回0次点击,引号保持不变。

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

我觉得我在这里犯了一个简单的错误,但对于我的生活,我找不到它。任何指针都会非常感激。

1 个答案:

答案 0 :(得分: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": ... }对象中发送产品数据。此外,您的示例中的变体数据看起来周围有太多括号。尝试将变体包含在我的示例中的一组方括号中。