如何在 Liquid 中将字符串转换为具有键和值的对象数组

How to turn a string in to an array of objects with keys and values in Liquid

我希望将您可以在 Shopify 主题设置中编辑的字符串转换为我的 Liquid 文件中的对象键值数组。

例如:

var text = 'key1:value1,key2:value2,anotherKey:anotherValue'

in to:

var array = [{key1: value1}, {key2: value2}, {anotherKey: anotherValue}]

每个对象将在字符串中用“,”分隔,键在“:”的左侧,值在右侧。

我需要将其写入 theme.liquid 文件,但不确定如何实现。任何帮助将不胜感激。

到目前为止我只知道了:

{% assign text = 'key1:value1,key2:value2,anotherKey:anotherValue' %}

{% assign splitText = text | split: ',' %}

{% assign array = '' | split: '' %}
{% for data in splitText %}
    {% assign key = data | split: ':' | first %}
    {% assign value = data | split: ':' | last %}
    {% assign array = array | concat: key | append: ':' | concat: value %}
{% endfor %}

{{ array }}

在 Liquid 中无法创建关联数组或具有命名索引的数组。但是,作为变通方法,您可以创建 2 个数组。将一个数组的相同索引视为键,将另一个数组的相同索引视为值。

示例实现如下所示

{% assign text = 'key1:value1,key2:value2,anotherKey:anotherValue' %}

{% assign objArr = text | split: ',' %}

{% assign keyArr = ''%}
{% assign valArr = ''%}


{% for obj in objArr %}
    {% assign key = obj | split: ':' | first %}
    {% assign value = obj | split: ':' | last %}
    {% assign keyArr = keyArr| append: ',' | append: key  %}
    {% assign valArr = valArr| append: ',' | append: value  %}
{% endfor %}

{% assign keyArr = keyArr | remove_first: ',' | split: ',' %}
{% assign valArr = valArr | remove_first: ',' | split: ',' %}


{% for obj in objArr %}
    {{keyArr[forloop.index0]}} :  {{valArr[forloop.index0]}}
    <br/>
{% endfor %}

以上代码完成了基本工作。不要忘记比较两个数组长度以确定是否所有键值对都按照逻辑完美创建。