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

JSON字符串构建报错排查:Expecting 'STRING', '}', got 'undefined'

JSON生成与Web服务调用问题排查

问题描述

使用以下代码生成JSON字符串:

let jsonString = "{ \"AjaxBookGenieParams\": " + JSON.stringify(ajaxBookGenieParams) + " }";

调用Web服务时出现500 Internal Server Error,提示:missing value for parameter: ajaxBookGenieParams;用JSONLint校验生成的字符串时,得到错误:Expecting 'STRING', '}', got 'undefined'。

问题原因

  1. JSON格式非法:
    核心问题是JSON.stringify(ajaxBookGenieParams)返回了undefined,导致最终拼接出的JSON字符串为{"AjaxBookGenieParams": undefined}。而JSON规范不允许undefined作为有效值,只能使用null、字符串、数字、对象、数组、true/false,这直接触发了JSONLint的校验错误。
  2. 服务端解析失败:
    服务端无法解析非法的JSON结构,因此返回500错误,并判定ajaxBookGenieParams参数缺失。
  3. 触发场景:
    • ajaxBookGenieParams变量未定义或被赋值为undefined;
    • ajaxBookGenieParams包含循环引用(如对象引用自身),导致JSON.stringify无法正常序列化;
    • 手动拼接JSON字符串的方式易引入语法错误,可靠性远低于直接序列化完整对象。

解决方法

  • 确保变量有效:先确认ajaxBookGenieParams已被正确定义并赋值为合法对象,无循环引用。
  • 避免手动拼接JSON:改用完整对象序列化的方式生成JSON字符串,避免语法错误:
    // 构造完整参数对象后序列化
    let requestParams = {
      AjaxBookGenieParams: ajaxBookGenieParams
    };
    let jsonString = JSON.stringify(requestParams);
    
    若ajaxBookGenieParams可能为undefined,可提前处理为默认对象:
    let requestParams = {
      AjaxBookGenieParams: ajaxBookGenieParams || {}
    };
    let jsonString = JSON.stringify(requestParams);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:03:21