python 快速基线管道:如何使用Jinja将嵌套的JSON数组提取到多选文本字段中?

7rfyedvj  于 2023-02-15  发布在  Python
关注(0)|答案(1)|浏览(125)

我正在使用QuickbasePipelines从REST API拉取数据并保存到表中。

B. Fetch JSON
C. Prepare Bulk Record Upsert
D. Iterate over JSON records
For each JSON Handler - JSON Objects (D) Do
    E. Add Bulk Upsert Row
F. Commit Upsert

"添加批量上插行" 步骤中,我将表中的字段Map到传入JSON记录的属性。
我在JSON记录中遇到了一个关于"自定义字段"的挑战。有些字段在JSON中不是简单地显示为"key": "value"对,而是显示在一个嵌套数组中,如下所示:

"custom_fields": [
    {
        "key": "street",
        "value": "foo",
    },
    {
        "key": "city",
        "value": "bar",
    },
    {
        "key": "state",
        "value": "baz",
    }
]

在upsert步骤中,我使用Jinja代码块,通过键从这个结构中提取特定的值:

{% for field in d.custom_fields %}
{% if field['key'] == 'street' %}
    {{ field['value'] }}
{% endif %}
{% endfor %}

这对于 * Text * 类型的字段非常有效,但是当尝试将JSON数组值放入 * Multi-Select Text * 类型的字段时,此技术会失败。
当我使用类似上面的一个Jinja代码块来解析JSON的这一部分时:

"custom_fields": [
    {
        "key": "choices",
        "value": [
            "foo",
            "bar",
            "baz"
        ],
    }
]

我在"多选文本"字段中得到以下3个值:x一米一纳米一x、x一米二纳米一x和x一米三纳米一x。
这就好像Quickbase/Jinja将JSON中的值解析为字符串而不是数组一样。
我的问题是-如何将上面的JSON值转换为正确的选择:foobarbaz

    • 更新:**检查了管道的活动日志后,我发现QB从实际JSON派生的 * JSON Object * 的值为"[u'foo', u'bar', u'baz']"-一个字符串-这解释了表字段中出现的奇数值。

我还发现相同的 * JSON对象 * 在属性raw_record下有一个自身的副本,在该副本中的值是一个合理的['foo', 'bar', 'baz']。然而,我无法在我的Jinja模板中使用raw_record

u3r8eeie

u3r8eeie1#

在“添加批量向上插入行”步骤中的“多选”字段的值中,需要将数组转换为逗号分隔的字符串(与用于对关键字“street”进行逻辑检查的模式类似):

{% for item in array %}
{{item}}
{% if not loop.last %},{% endif %}{#Adds a comma between each value from array except the last one #}
{% endfor %}

相关问题