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

解析电商页面JS生成的产品数据时遭遇lexical error求助

解决电商页面JS对象转JSON解析失败的问题

问题根源

你遇到的核心问题是提取的内容并非标准JSON,而是JavaScript对象字面量,其中包含JSON规范不支持的语法:

  • || '' 这类JS逻辑短路表达式
  • 函数调用(如_getAvailabilityText('lowStock'))
  • 属性名未用双引号包裹(虽部分宽松解析器兼容,但不符合JSON标准)
    错误提示中的|| ""正是触发语法错误的直接原因——JSON解析器无法识别这种JS专属语法。

修复步骤与代码实现

我们需要先将JS对象转换为符合JSON规范的字符串,再进行解析:

library(stringr)
library(jsonlite)

# 假设json_data为你获取的原始JS代码字符串
raw_js_obj <- json_data %>%
  str_remove_all("\\n|\\t|\\s{2,}") %>% # 移除换行、制表符及多余空格
  str_extract("(?<=products\\.push\\()(\\{.*?\\})(?=\\);)") # 提取products.push内的目标对象

# 处理1:移除所有 || '' 逻辑表达式,保留原始有效值
cleaned_str <- str_replace_all(raw_js_obj, "\\s*\\|\\|\\s*''", "")

# 处理2:根据JS函数逻辑,替换固定返回值的函数调用
cleaned_str <- str_replace_all(cleaned_str, "_getAvailabilityText\\('lowStock'\\)", "'si'")
cleaned_str <- str_replace_all(cleaned_str, "_getAvailabilityBinary\\('lowStock'\\)", "1")

# 处理3:给所有属性名添加双引号,符合JSON键名规范
cleaned_str <- str_replace_all(cleaned_str, "(\\w+)\\s*:", '"\\1":')

# 解析为JSON对象
ex_parsed_json <- parse_json(cleaned_str)

关键说明

  1. 移除|| '':这是JS中处理空值的冗余逻辑,原始值本身已为字符串或空字符串,直接保留前半部分即可。
  2. 替换函数调用:页面内的_getAvailabilityText和_getAvailabilityBinary是固定逻辑函数,可根据传入参数直接替换为返回值;若后续出现其他库存状态(如outOfStock),可扩展条件分支处理。
  3. 属性名加双引号:标准JSON要求所有键必须用双引号包裹,这一步是确保解析器正确识别结构的核心操作。

验证后的标准JSON格式

处理后的字符串会转化为如下合法JSON,可被jsonlite正常解析:

{
  "id": "IME5401",
  "price": "22.99",
  "currency": "EUR",
  "name": "Imetec Living Air umidificatore Vapore 0,4 L 700 W Blu",
  "category": "Riscaldamento",
  "categoryId": "C7301",
  "group": "Riscaldamento",
  "tdId": "",
  "weight": "",
  "brand": "Imetec",
  "variant": "",
  "dimension55": "si",
  "metric5": 1,
  "dimension63": "",
  "metric12": "",
  "dimension10": "Piccoli e Grandi Elettrodomestici",
  "dimension11": "Trattamento Aria",
  "dimension66": "",
  "dimension62": "no-promo"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:47:51