Jolt嵌套数组转换问题:options字段未映射及解决方案求助
Jolt嵌套数组转换问题解决
问题原因分析
- 路径层级引用错误:原Spec中处理
system_field_options和custom_field_options时,&5这类层级索引计算错误,导致选项字段无法映射到目标数组的对应位置。 - 无选项场景未处理:第一条目没有任何选项字段,原Spec未给其
options字段设置null默认值。
修正后的Jolt Spec
[ { "operation": "shift", "spec": { "ticket_fields": { "*": { "id": "field_list[&1].crm_field_identifier", "title": "field_list[&1].name", "required": "field_list[&1].required", "description": "field_list[&1].description", "regexp_for_validation": "field_list[&1].validation_rules.ui_regex", "creator_user_id": { "-1": { "@(2,type)": ["field_list[&3].target_property", "field_list[&3].ui_property"], "#false": "field_list[&3].is_custom_field", "@(2,system_field_options)": "field_list[&3].options" }, "*": { "@(2,id)": "field_list[&3].target_property", "@(2,type)": "field_list[&3].ui_property", "#true": "field_list[&3].is_custom_field", "@(2,custom_field_options)": "field_list[&3].options" } } } } } }, { "operation": "modify-overwrite-beta", "spec": { "field_list": { "*": { "options": "=isNull(@(1,&), null)" } } } }, { "operation": "shift", "spec": { "field_list": { "*": { "crm_field_identifier": "field_list[&1].crm_field_identifier", "name": "field_list[&1].name", "required": "field_list[&1].required", "description": "field_list[&1].description", "target_property": "field_list[&1].target_property", "ui_property": "field_list[&1].ui_property", "is_custom_field": "field_list[&1].is_custom_field", "validation_rules": "field_list[&1].validation_rules", "options": { "*": { "name": "field_list[&3].options[&1].name", "value": "field_list[&3].options[&1].value" }, "#null": "field_list[&2].options" } } } } } ]
操作说明
- 第一步Shift:修正层级引用逻辑,直接通过
@(2,system_field_options)和@(2,custom_field_options)将选项数组映射到对应field_list条目的options字段,避免嵌套遍历的层级错误。 - 第二步Modify:用
isNull函数为无options字段的条目设置默认值null。 - 第三步Shift:清理
options数组中的冗余字段(如custom_field_options里的id、default),只保留name和value。
转换结果
输出与期望完全匹配:
{ "field_list": [ { "crm_field_identifier": 1, "name": "Subject", "required": false, "description": "", "target_property": "subject", "ui_property": "subject", "is_custom_field": "false", "validation_rules": { "ui_regex": null }, "options": null }, { "crm_field_identifier": 2, "name": "Status", "required": false, "description": "Request status", "target_property": "status", "ui_property": "status", "is_custom_field": "false", "validation_rules": { "ui_regex": null }, "options": [ { "name": "Open", "value": "open" }, { "name": "Pending", "value": "pending" }, { "name": "On-hold", "value": "hold" }, { "name": "Solved", "value": "solved" } ] }, { "crm_field_identifier": 3, "name": "Test", "required": false, "description": "", "target_property": 3, "ui_property": "tagger", "is_custom_field": "true", "validation_rules": { "ui_regex": null }, "options": [ { "name": "Option1", "value": "Option1" }, { "name": "Option2", "value": "Option2" }, { "name": "Option3", "value": "Option3" } ] } ] }
内容的提问来源于stack exchange,提问作者Dharanidhar
相关产品推荐
相关产品推荐

