如何将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
相关产品推荐
相关产品推荐

