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

如何将ApolloError的JSON字符串转为实际ApolloError对象或在JS中解析?

将ApolloError的JSON字符串转为实际对象的方案

问题描述

有没有办法将ApolloError的JSON字符串表示转换为实际的ApolloError对象?或者至少可以在JS中以某种方式对其进行解析?
例如,我持有如下格式的字符串:

const x = `{ 'message': 'message', 'locations': [{ 'line': 2, 'column': 3 }], 'path': ['path'], 'extensions': { 'errorType': 'type', 'errorCode': None, 'errorName': 'name', 'message': "",'stackTrace': None, 'operatorName': None, } }`;

具体实现步骤

你给出的示例字符串不是标准JSON格式,需要先做预处理再解析,最终转成ApolloError实例的操作如下:

1. 预处理非法JSON字符串

示例字符串存在单引号包裹键值、Python风格None值、多余尾逗号、HTML转义双引号四个问题,先修正为合法JSON:

const rawStr = `{ 'message': 'message', 'locations': [{ 'line': 2, 'column': 3 }], 'path': ['path'], 'extensions': { 'errorType': 'type', 'errorCode': None, 'errorName': 'name', 'message': "",'stackTrace': None, 'operatorName': None, } }`;

const validJsonStr = rawStr
  .replace(/"/g, '"') // 替换HTML转义的双引号
  .replace(/'/g, '"') // 单引号统一替换为标准JSON要求的双引号
  .replace(/None/g, 'null') // 替换Python空值为JS兼容的null
  .replace(/,\s*([\]}])/g, '$1'); // 移除对象、数组末尾多余的逗号

2. 解析为普通JS对象

const parsedError = JSON.parse(validJsonStr);

如果仅需要使用错误内的字段,直接操作parsedError即可,不需要转换为ApolloError实例。

3. 转换为ApolloError实例

如果需要完整的ApolloError实例对象,调用构造函数传入对应参数即可:

import { ApolloError } from 'apollo-server-errors';

const apolloError = new ApolloError(
  parsedError.message,
  parsedError.extensions?.errorCode,
  parsedError.extensions
);
// 手动补充locations、path字段
apolloError.locations = parsedError.locations;
apolloError.path = parsedError.path;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:54:07