Fix JSON parsing in analyzeMenuImages for PDF menu imports
The PDF upload goes to analyzeMenuImages.cfm (not analyzeMenuUrl.cfm). Added control character cleaning, smart quote replacement, and Jackson fallback parser with error handling. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
8ac6800d47
commit
7d23cb5487
1 changed files with 19 additions and 0 deletions
|
|
@ -183,8 +183,27 @@
|
||||||
</cfif>
|
</cfif>
|
||||||
<cfset responseText = trim(responseText)>
|
<cfset responseText = trim(responseText)>
|
||||||
<cfset responseText = reReplace(responseText, ",(\s*[\]\}])", "\1", "all")>
|
<cfset responseText = reReplace(responseText, ",(\s*[\]\}])", "\1", "all")>
|
||||||
|
<!--- Clean control characters and smart typography from PDFs --->
|
||||||
|
<cfset responseText = reReplace(responseText, "[\x00-\x08\x0B\x0C\x0E-\x1F]", "", "all")>
|
||||||
|
<cfset responseText = replace(responseText, chr(8216), "'", "all")>
|
||||||
|
<cfset responseText = replace(responseText, chr(8217), "'", "all")>
|
||||||
|
<cfset responseText = replace(responseText, chr(8211), "-", "all")>
|
||||||
|
<cfset responseText = replace(responseText, chr(8212), "-", "all")>
|
||||||
|
<cfset responseText = replace(responseText, chr(8230), "...", "all")>
|
||||||
|
|
||||||
|
<cftry>
|
||||||
<cfset imageResult = deserializeJSON(responseText)>
|
<cfset imageResult = deserializeJSON(responseText)>
|
||||||
|
<cfcatch type="any">
|
||||||
|
<!--- Lucee parser failed — try Jackson --->
|
||||||
|
<cftry>
|
||||||
|
<cfset objectMapper = createObject("java", "com.fasterxml.jackson.databind.ObjectMapper")>
|
||||||
|
<cfset imageResult = objectMapper.readValue(responseText, createObject("java", "java.util.LinkedHashMap").getClass())>
|
||||||
|
<cfcatch type="any">
|
||||||
|
<cfthrow message="JSON parse error in image response. First 500 chars: #replace(left(responseText, 500), '##', '####', 'all')#">
|
||||||
|
</cfcatch>
|
||||||
|
</cftry>
|
||||||
|
</cfcatch>
|
||||||
|
</cftry>
|
||||||
<cfset arrayAppend(allResults, imageResult)>
|
<cfset arrayAppend(allResults, imageResult)>
|
||||||
</cfloop>
|
</cfloop>
|
||||||
|
|
||||||
|
|
|
||||||
Reference in a new issue