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

Bil*_*own 3 liquid shopify

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

例如:

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

in to:

var array = [{key1: value1}, {key2: value2}, {anotherKey: anotherValue}]
Run Code Online (Sandbox Code Playgroud)

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

我需要将其写入文件中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 }}

Run Code Online (Sandbox Code Playgroud)

Bil*_*bar 5

在 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 %}
Run Code Online (Sandbox Code Playgroud)

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