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

3

我希望将一个可以在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 }}

1个回答

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 %}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接