Как работать со словарем json в шаблонах Liquid?

Я довольно новичок в шаблонах Liquid, но, похоже, я не нашел способа перебрать словарь в json и получить доступ к различным значениям. Отказ от ответственности: я использую расширение Shopify Liquid Preview для VSCode.

Введите файл json:

Входной файл содержит два свойства: CustomerId и Transactions, которое является свойством «словарь», содержащим список 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, поэтому я надеялся найти хороший способ заставить это работать как есть.

Спасибо


person Sam Vanhoutte    schedule 19.01.2021    source источник


Ответы (1)


В большинстве разновидностей Liquid должна быть возможность ссылаться на поле объекта по имени следующим образом:

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

Затем нужно откуда-то получить все известные идентификаторы транзакций. Если они недоступны в виде массива, то грязным решением может быть анализ исходного входящего 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>
person scale_tone    schedule 20.01.2021
comment
Спасибо за ответ. Мне, очевидно, не нравится анализ строки json (и нет, я не знаю заранее идентификатор), поэтому любой лучший вариант всегда будет моим предпочтением. - person Sam Vanhoutte; 20.01.2021