如何从OCR返回的JSON中提取text键对应的数值内容
提取OCR JSON中的数值型Text值并格式化
看起来你需要从OCR返回的JSON数据里,筛选出text键对应的数值内容(比如1,240这种带千分位的数字),然后把它们用空格拼接成目标格式的字符串。我来帮你优化代码解决这个问题:
首先,你的现有代码有两个小问题:一是会提取所有text值而不是只筛选数值,二是在回调里错误地把JSON对象转成了字符串传入遍历函数(这会导致遍历每个字符而不是JSON结构)。
改进后的JavaScript函数
这个函数会递归遍历JSON结构,筛选出符合数值格式的text值,最后拼接成你想要的空格分隔字符串:
function extractNumericTexts(jsonStruct) { const numericTexts = []; // 递归遍历JSON结构的内部函数 function traverse(obj) { // 处理数组类型 if (Array.isArray(obj)) { obj.forEach(item => traverse(item)); } // 处理对象类型(排除null) else if (typeof obj === 'object' && obj !== null) { for (const key in obj) { if (key === 'text') { // 用正则判断是否为带千分位的数值格式 const textValue = obj[key]; if (/^\d{1,3}(,\d{3})*$/.test(textValue)) { numericTexts.push(textValue); } } else { // 递归遍历子结构 traverse(obj[key]); } } } } traverse(jsonStruct); // 用空格拼接结果,避免多余的结尾空格 return numericTexts.join(' '); }
修改HTML中的回调逻辑
确保传入的是解析后的JSON对象,而不是字符串:
.done(function(data) { // 先确保data是JSON对象(如果后端返回的是字符串则解析) const jsonData = typeof data === 'string' ? JSON.parse(data) : data; // 调用函数提取数值text const result = extractNumericTexts(jsonData); // 可以把结果输出到控制台或者页面上 console.log(result); // 针对你提供的JSON示例,会输出:1,240 1,160 // 比如展示到页面的某个元素中: // document.getElementById('result-container').textContent = result; })
关键说明
- 数值筛选逻辑:正则表达式
/^\d{1,3}(,\d{3})*$/专门匹配带千分位的数字格式,比如1,240、10,000、123都能匹配,而像cal、Sonic这类非数值内容会被过滤掉。 - 避免多余空格:用数组收集符合条件的值,最后用
join(' ')拼接,不会出现字符串拼接时末尾多余的空格。 - 正确处理JSON结构:区分数组和对象类型,确保所有嵌套的
text键都能被遍历到。
针对你提供的JSON示例,运行这段代码后会得到1,240 1,160,完全符合你期望的格式。
内容的提问来源于stack exchange,提问作者user3792664
相关产品推荐
相关产品推荐

