You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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;
})

关键说明

  1. 数值筛选逻辑:正则表达式/^\d{1,3}(,\d{3})*$/专门匹配带千分位的数字格式,比如1,240、10,000、123都能匹配,而像cal、Sonic这类非数值内容会被过滤掉。
  2. 避免多余空格:用数组收集符合条件的值,最后用join(' ')拼接,不会出现字符串拼接时末尾多余的空格。
  3. 正确处理JSON结构:区分数组和对象类型,确保所有嵌套的text键都能被遍历到。

针对你提供的JSON示例,运行这段代码后会得到1,240 1,160,完全符合你期望的格式。

内容的提问来源于stack exchange,提问作者user3792664

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:34:27