从(子)字符串解析JSON

从(子)字符串解析JSON,json,parsing,Json,Parsing,假设我有一个包含JSON的字符串: {"foo":"bar"} 然后,我可以使用JSON.parse函数轻松解析它 现在假设字符串有一些附加前缀,例如: blah: {"foo":"bar"} 当然,简单地使用JSON.parse是行不通的。我需要做的是提取一个子字符串,然后运行该函数。现在假设我不知道前缀的内容或长度(即,我不知道它是否以冒号和空格结尾,或者它是否总是六个字符长,或者…):解析包含的JSON的最佳方法是什么 最明显的方法可能是只找到第一个{的索引,但如果字符串本身包含{,则

假设我有一个包含JSON的字符串:

{"foo":"bar"}
然后,我可以使用
JSON.parse
函数轻松解析它

现在假设字符串有一些附加前缀,例如:

blah: {"foo":"bar"}
当然,简单地使用
JSON.parse
是行不通的。我需要做的是提取一个子字符串,然后运行该函数。现在假设我不知道前缀的内容或长度(即,我不知道它是否以冒号和空格结尾,或者它是否总是六个字符长,或者…):解析包含的JSON的最佳方法是什么

最明显的方法可能是只找到第一个
{
的索引,但如果字符串本身包含
{
,则这将不起作用


是否有更好的方法,即更可靠的方法来执行此操作?

您可能需要使用
替换
来删除前缀,例如:

test='blah:{“foo”:“bar}';
test=test.replace(/^.*?{/,“{”);
警报(测试);
如果您对前缀一无所知,我猜您可能必须一次删除一个字符,并尝试将其余字符解析为JSON。一旦成功,您将找到起点


如果解析失败,将抛出一个语法错误,您显然必须处理它。

感谢您提供的代码片段,但正如前面所说的,我不知道最后是否总是有一个空格,因此此检查不会适用于所有情况。只需将空格设置为可选,
。我将更新正则表达式。我认为没有为您提供此类智能我们(或者我不知道)…这样你就可以删除不需要的/不可预测的字符串并找到要解析的有效json…你可以做的另一件事是…搜索子字符串索引{“和”}…假设int indexOfStartOfJson=indexof({”);int indexOfEndOfJson=indexof(“});现在子字符串…即string validJson=substring(indexOfStartOfJson,indexOfEndOfJson);尝试indexOf(“{”)、lastIndexOf(“}”)和substring…?@BNK这是我已经说过的我可以做的,但我正在寻找更好的选择;-)这很有效,但可能很慢……但无论如何,谢谢你的建议!是的,绝对是最后的选择,无论是风格还是性能方面:)