Javascript 从包含JSON对象的字符串解析JSON

Javascript 从包含JSON对象的字符串解析JSON,javascript,json,Javascript,Json,我有一根像 "Something has happened {\"prop1\":{\"name\":\"foo\"}}" 我想解析出JSON,以便格式化字符串。例如: Something has happened { "prop1":{ "name":"foo" } } 在JavaScript中,实现这一点的好方法是什么 字符串中可能有多个对象,而且该对象可能不为人所知,因为它可能包含许多嵌套对象或数组。提前感谢。我们可以假设“{”和“}”表示json的开始和结束

我有一根像

"Something has happened {\"prop1\":{\"name\":\"foo\"}}"
我想解析出JSON,以便格式化字符串。例如:

Something has happened 
{
   "prop1":{
    "name":"foo"
     }
}
在JavaScript中,实现这一点的好方法是什么


字符串中可能有多个对象,而且该对象可能不为人所知,因为它可能包含许多嵌套对象或数组。提前感谢。

我们可以假设“{”和“}”表示json的开始和结束吗。如果是这样,你可以得到一个子串;请参阅下面的代码。你可以用正则表达式做同样的事情

    var str = "Something has happened {\"prop1\":{\"name\":\"foo\"}}"
    var start = str.indexOf("{");
    var end = str.lastIndexOf("}");
    var json = str.substr(start, end);
最小值就是打印字符串

那好吧。一个非常简单、未经优化、不一定健壮的漂亮打印功能可能如下所示:

函数BasicPropertyPrintStr{ var输出=; 风险等级=0; var缩进=“”; var-inQuotes=false; 对于变量i=0;i0{ inQuotes=!inQuotes; 输出+=电流; }否则请加引号{ 输出+=电流; }否则,如果当前==','&&indentLevel>0{ 输出+=',\n'+indent.repeatindentLevel; }如果当前=='{'| |当前=='['{ 如果indentLevel==0输出+='\n'; 输出+=当前+'\n'+缩进。重复++缩进级别; }如果当前=='}'| |当前==']'{ 输出+='\n'+indent.repeat-indentLevel+current; 如果indentLevel==0输出+='\n'; }否则{ 输出+=电流; } 如果级别<0{ //分析失败:括号不平衡。请执行某些操作。 } } 返回输出; } var input='这是一个简单的对象,用于测试:{prop1:{name:foo}},这是一个更复杂的对象,在一个属性值中有花括号:{prop1:{这是数据,不是对象},arr:[1,{a:1,b:{x:1,y:[3,2,1]},3,4]}和一个非嵌套数组:[1,2,3]';
console.logbasicPrettyPrintinput;欺骗我想解析出JSON,以便格式化字符串。这到底是什么意思?我不确定我是否理解这个问题。字符串文字“发生了什么”{\prop1\:{\name\:\foo\}产生的结果正好是您想要的字符序列?这样我就可以格式化字符串-您只是想以所示格式漂亮地打印整个字符串,还是需要专门提取JSON的位?您是否会假设{的任何使用都表示较大字符串中JSON的开始?您提到了嵌套数组,但外部对象是否可以是类似于[1,2,3]的数组?@nnnnnn最小值只是漂亮地打印字符串,但提取Json对象也很好。是的,可能有一个数组作为外部对象。@FelixKling我更新了我的问题,以便更好地表示格式。我需要能够漂亮地打印此对象。字符串不仅包含一个对象,还可以包含一些w不在对象中的单词,加上一个字符串中可以有多个对象,比如从{}到{},如果我可以有多个对象,那么这将像我在上面的回答中从{}到{}一样中断。是的,我考虑过使用这种过程方法,但我想有人可能有一个聪明的解决方案。谢谢