【问题标题】:structs with structs and booleans带有结构和布尔值的结构
【发布时间】:2020-01-27 17:41:54
【问题描述】:

我有一个包含结构的变量。这些结构可以有 CFBolean 变量、更多结构和其他变量。一开始,它嵌套了两层。我们现在向上移动到四个级别。我不喜欢我目前的做法。我也可以想象五个层次发生。我无法控制需要这些数据的外部系统。所以我正在寻找一种更通用的方法。

function toJavaBoolean(any data){
    //for now, assume it's a struct to DBO conversion

    data.each(function(key, value) {
        if (getMetadata(data[key]).getName() == 'coldfusion.runtime.CFBoolean') {
            data[key] = javacast("boolean", data[key]);
        }

        if (isStruct(data[key]))    {
            data2 = data[key];
            data2.each(function(key, value) {
                if (getMetadata(data2[key]).getName() == 'coldfusion.runtime.CFBoolean')    {
                    data2[key] = javacast("boolean", data2[key]);
                }

                if (isStruct(data2[key]))   {
                    data3 = data2[key];
                    data3.each(function(key, value) {
                        if (getMetadata(data3[key]).getName() == 'coldfusion.runtime.CFBoolean')    {
                            data3[key] = javacast("boolean", data3[key]);
                        }

                        if (isStruct(data3[key]))   {
                            data4 = data3[key];
                            data4.each(function(key, value) {
                                if (getMetadata(data4[key]).getName() == 'coldfusion.runtime.CFBoolean')    {
                                    data4[key] = javacast("boolean", data4[key]);
                                }
                            });
                        }
                    });
                }
            });
        }
    });

【问题讨论】:

  • 如何处理 NULL 支持?导出到 CSV 时,我一直在将 yes/no 转换为 1/0,而 NULL(来自 SQL 查询)被视为特殊并导出为空字符串。对于 JSON,您可能希望删除未定义的密钥。

标签: recursion coldfusion cfml coldfusion-2016


【解决方案1】:

你可以像这样使用递归......

function toJavaBoolean(any data){
    data.each(function(key, value) {
        if (getMetadata(data[key]).getName() == 'coldfusion.runtime.CFBoolean') {
            data[key] = javacast("boolean", data[key]);
        }
        else if (isStruct(data[key]))
            data[key] = toJavaBoolean(data[key]);
    }
    return data;
}

对于较大的尺寸或较大的深度,有些非递归方法可能更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多