使用 Shopify Liquid 模板访问元字段中的 JSON 块

Access JSON lumps in metafields with Shopify Liquid templates

我想知道是否有人知道我是否可以在 Liquid 中访问 JSON,如下例所示。

我已经使用名称空间 suppliers_details、键 suppliers 和值:

为供应商页面创建了一个元字段
{
  name: "Supplier Name One",
  address: "Supplier Address One"
},
{
  name: "Supplier Name Two",
  address: "Supplier Address Two"
}

在我的模板中:

{% assign suppliers = page.metafields.suppliers.suppliers %}
{% for supplier in suppliers %}
  <p>{{ supplier.name }}</p>
  <p>{{ supplier.address }}</p>
{% endfor %}

这不起作用,因为我无法将数据更改为模板可用于循环访问的格式,有没有办法做到这一点?

干杯

无法使用 Liquid 或至少不是默认方式来解析 JSON。

您可以编写一些代码将其拆分成多个部分,但您将无法链接对象:

{% capture string %}{name:"Supplier Name One",address:"Supplier Address One"},{name:"Supplier Name Two",address:"Supplier Address Two"}{% endcapture %}

{% assign jsplit = string | replace: '},{', '@@' %}
{% assign jsplit = jsplit | replace: '{' %}
{% assign jsplit = jsplit | replace: '}' %}
{% assign jsplit = jsplit | split: '@@' %}

{% for json in jsplit %}
  {% assign splitByComma = json | split: ',' %}
  {% for comma in splitByComma %}
    {% assign splitByDots = comma | split: ':' %}
    <p>{{ splitByDots[1] }}</p>
  {% endfor %}
{% endfor %}

你会得到想要的结果,但不是你想象的那样。

最好的方法是将字符串传递给 Javascript,在那里解析它并通过 JS 填充 DOM。

现在支持此功能,它改变了游戏规则! Shopify 发布了一种名为 "json_string" 的新元字段格式类型,可让您通过普通的液体点表示法直接访问每个节点的值。我知道这会让每个人的生活更轻松。摘自文档 (https://help.shopify.com/en/themes/liquid/objects/metafield):

以下是 Shopify 开发人员在 Shopify 论坛上发表的最初帖子之一,可能对您有所帮助:https://ecommerce.shopify.com/c/api-announcements/t/new-json_string-value-type-for-metafield-object-540896

我认为它现在可以工作了,下面是我的 json ,它是产品元字段 & valueType 是 json string

[ 
   { 
      "question":"hello this is question",
      "answer":"Hello This is answer"
   },
   { 
      "question":"hello this is question2 ",
      "answer":"Hello This is answer 2"
   }
]

吹是液体代码

{% assign qas = product.metafields.manifester.product_qa %} // product.metafields.{namespace}.{key}

{% for qa in qas %}
  <div style="border-bottom: 1px solid #222222;">
    <p> {{ qa.question }} </p>
    <p style="font-weight:bold"> {{ qa.answer }} </p>
  </div>
{% endfor %}

Shopify 自此弃用了“json_string”元字段并提供了“json”元字段选项。

要使用点表示法访问数据,您需要在键后使用 .value。

例如,如果我有这个 JSON:

{
  name: "Supplier Name One",
  address: "Supplier Address One"
},
{
  name: "Supplier Name Two",
  address: "Supplier Address Two"
}

我会这样访问它:

{% assign suppliers = page.metafields.suppliers.suppliers.value %}
{% for supplier in suppliers %}
  <p>{{ supplier.name }}</p>
  <p>{{ supplier.address }}</p>
{% endfor %}