Если вы имеете в виду только количество уникальных имен файлов, а не счетчик, используйте структуру.Структуры хранят только уникальные ключи.
Создать пустую структуру перед внешним циклом.Затем добавьте соответствующие имена файлов во внутренний цикл.(Я бы рекомендовал использовать isNull вместо isDefined и список функций для получения расширения файла)
<cfset uniqueFileNames = {}>
<cfloop from="1" to="#ArrayLen(stackArray)#" index="sIndex">
...
<cfloop ....>
<!--- If the file name ENDS with .cfm include it --->
<cfif !isNull(thisThreadFile) && listLast(thisThreadFile, ".") eq "cfm">
<cfset uniqueFileNames[thisThreadFile] = true>
</cfif>
</cfloop>
</cfloop>
Наконец, получите количество уникальных файлов с помощью structCount () :
<cfset json_object["active_requests"] = structCount(uniqueFileNames)>
Предлагаемые улучшения
Поскольку вы используете 2016, переключение на циклы «массив» и сокращение структуры сделают код еще проще.Полный пример:
<cfset thread = createObject("java", "java.lang.Thread")>
<cfset allTraces = thread.getAllStackTraces()>
<cfset traceArray = allTraces.entrySet().toArray()>
<cfset uniqueFileNames = {}>
<cfloop array="#traceArray#" index="currThread">
<cfloop array="#currThread.getValue()#" index="thisThread">
<cfset thisThreadFile = thisThread.getFileName()>
<cfif !isNull(thisThreadFile) AND lcase (thisThreadFile).endsWith(".cfm")>
<cfset uniqueFileNames[thisThreadFile] = true>
</cfif>
</cfloop>
</cfloop>
<cfset json_object = {"active_requests" = structCount(uniqueFileNames)}>
<cfoutput>#serializeJSON(json_object)#</cfoutput>