我有一个无效的json字符串,如下所示,
"{one: 'one', two: 'two'}"
我尝试使用JSON.parse将其转换为对象。但是,这不是有效的json字符串。 是否有任何函数可以将这种无效格式转换为有效的json字符串或直接转换为对象?
答案 0 :(得分:5)
如果您的示例语法与真正的JSON相同,则JSONLint表示您需要双重引用名称和值。
仅在这种情况下,请使用以下替换呼叫:
var jsontemp = yourjson.replace((/([\w]+)(:)/g), "\"$1\"$2");
var correctjson = jsontemp.replace((/'/g), "\"");
//yourjson = "{one: 'one', two: 'two'}"
//jsontemp = "{"one": 'one', "two": 'two'}"
//correctjson = "{"one": "one", "two": "two"}"
但是你应该首先尝试使用有效的Json。
答案 1 :(得分:1)
如果问题是“我可以将无效的JSON转换为有效的JSON”,在一般情况下答案显然是“不”;你甚至可以从像“$ @!~~”这样的字符串开始?
在这种特殊情况下,JSON只是无效,因为没有引用属性名称;作为JavaScript,字符串 有效,可以使用,例如
进行解析var myObj = eval( "x=" + myString );
或更好
var myObj = (new Function("return " + myString))();
然而,这可能是非常不安全的,你不应该这样做,除非你是肯定的,字符串不会造成伤害(如果你不能在这个位置生成有效的JSON,这似乎不太可能)第一名)。如果JSON代码在其他方面无效,它也无济于事,如果属性名称不是有效的JS标识符,它将失败。
要获得正确答案,了解有关此问题背景的更多信息会很有用。