首页 > 解决方案 > 如何处理 Liquid 模板中的 json 字典?

问题描述

我对 Liquid 模板相当陌生,但我似乎没有找到一种方法来遍历 json 中的字典并访问不同的值。免责声明:我正在使用适用于 VSCode 的 Shopify Liquid Preview 扩展。

输入json文件:

输入文件包含两个属性:CustomerIdTransactions,它是“字典”属性,包含 KeyValuePairs 列表。我想遍历 Transactions 集合并输出TransactionValue属性。

{
    "CustomerId": 13,
    "Transactions": {
        "1": {
            "Id": "1",
            "TransactionValue": 1000
        },
        "2": {
            "Id": "2",
            "TransactionValue": 207.47
        }
    }
}

预期输出:

<h1>Customer 13</h1>
<ul>
    <li>1000</li>
    <li>207.47</li>
</ul>

当前尝试

我可以轻松地循环集合,但是我不清楚如何访问当前事务的实际属性。以下都不起作用。当只是输出变量时,它会像这样打印:1,[object Object]

<ul>
{% for trx in Transactions %}
    <li>{{trx}}</li>
    <li>{{trx.Key}}</li>
    <li>{{trx.Value}}</li>
    <li>{{trx.Object}}</li>
{% endfor %}
</ul>

我并没有真正控制输入 json,所以我希望找到一种使这项工作保持原样的好方法。

谢谢

标签: jsonliquiddotliquid

解决方案


在大多数 Liquid 风格中,应该可以按名称引用对象字段,如下所示:

{{ Transactions["1"].TransactionValue }}

然后是从某个地方获取所有已知的 transactionIds 的问题。如果它们不能作为数组使用,那么肮脏的解决方案可能是解析原始传入的 JSON,例如:

{% assign transactionIds = Transactions | split: "\"Id\": \"" %}
<ul>
{% for id in transactionIds %}
    {% if id[0] != "{" %}
        {% assign realId = id | split: "\"" | first %}
        <li>
            {{ Transactions[realId].TransactionValue }}
        </li>
    {% endif %}
{% endfor %}
</ul>

推荐阅读