【发布时间】:2021-04-07 15:43:54
【问题描述】:
我在将非 json 对象字符串解析为 javascript 中的实际对象时遇到问题
示例字符串如下所示:
let objString = '{ one: [1, 2, 3], num: 1 }';
我希望它看起来像
obj = { one: [1, 2, 3], num: 1 };
到目前为止我已经尝试过:
- JSON.stringify 然后 JSON.parse
- JSON.parse
- 评估
由于相当明显的原因,这些都不起作用,但我被困在如何实现这一点上,这是我正在编写的用于运行和评估代码的类,下面是相关方法的 sn-p。
compare() {
const { testCaseInfo, stdout } = this;
const expected = testCaseInfo.expected;
if (this.err || stdout.length < 1) { return false };
let parsedAnswer = stdout;
parsedAnswer = parsedAnswer.split('\n').join('');
/* Need help here, some edge case of Obj strings */
if (parsedAnswer.indexOf('{')) {
}
// This works for everything else
parsedAnswer = JSON.parse(parsedAnswer);
this.output = parsedAnswer;
return _.isEqual(parsedAnswer, expected);
}
【问题讨论】:
-
这是一个非常 X/Y 的问题。可能,但如果可行,我真的建议考虑另一种方法
-
尝试将所有 ' 替换为 " like
objectString.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": '); -
您是否可以控制
objString的生成方式?JSON.parse('{ "one": [1, 2, 3], "num": 1 }')与键周围的引号一起使用。如果没有,您可能需要考虑清理您的 JSON。 stackoverflow.com/questions/9637517/… -
@wahoowa 原始文本实际上是从执行文件的标准输出中收集的,因此它已经以字符串形式出现,而不是 JSON 格式。 :(
-
@fortunee 谢谢你的想法,遗憾的是没有工作。
标签: javascript