我正在开发一个需要处理JSON字符串并使用对象的Node.js应用程序。
大多数情况都很好,JSON.parse(myString)
就是我所需要的。
该应用程序还从第三方获取数据。其中之一似乎是用Python开发的。 我的应用程序对布尔值进行了可重复的扼制,因为它们被大写了。
示例:
var jsonStr = "{'external_id': 123, 'description': 'Run #2944', 'test_ok': False}";
try{
var jsonObj = JSON.parse(jsonStr);
}catch(err){
console.err('Whoops! Could not parse, error: ' + err.message);
}
注意test_ok
参数-当它遵循Javascript方式而使用小写false
布尔值时,一切都很好。但是大写的布尔值不可行。
我当然可以尝试通过字符串替换来替换大写的布尔值,但是我害怕更改不应该更改的内容。
JSON.parse
上有其他替代方案吗?
答案 0 :(得分:0)
我并不是无礼的,但是根据json.org,它是无效的json。这意味着您将必须进行破解,在其中必须识别字符串化的布尔值“ True”并将其转换为“ true”,而不会影响可以说是“ True dat!”的字符串。
答案 1 :(得分:0)
首先,我不建议您使用下面的代码。这只是为了演示如何将您的输入字符串转换为有效的JSON。存在问题,一个是布尔值 False ,另一个是属性名周围的单引号。我不是很积极,但我相信这些需要用双引号引起来。
我认为不必将字符串转换为有效的JSON是一个不错的选择。如果您别无选择,这意味着您无权访问生成该字符串的代码,那么下面的代码仍然不是一个好选择,因为如果在字符串值中嵌入引号,它将引起问题。即您将需要不同的字符串替换逻辑。
在使用代码之前,请牢记所有这些。
var jsonStr = "{'external_id': 123, 'description': 'Run #2944', 'test_ok': False}";
try {
jsonStr = jsonStr.replace(/:[ ]*False/,':false' ).replace( /'/g,'"');
var jsonObj = JSON.parse(jsonStr);
console.log( jsonObj );
} catch (err) {
console.err('Whoops! Could not parse, error: ' + err.message);
}