JSON.parse-如何处理大写的布尔值?

时间:2019-03-10 15:15:41

标签: javascript json jsonparser

我正在开发一个需要处理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上有其他替代方案吗?

2 个答案:

答案 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);
}