PHP正则表达式求助:将非有效JSON字符串转换为合法JSON
把非规范JSON转为合法JSON的解决方案
嘿,我来帮你搞定这个不规范的JSON转合法格式的问题!咱们先拆解下原字符串的问题:
- 所有键(比如
$page、id)都没加双引号,JSON要求键必须用双引号包裹 - 字符串类型的值(比如
Mr. test、doctor、en)缺少双引号 - 日期
3/30/2018如果作为字符串存储,也需要加上双引号,不然会被当成无效表达式
修正后的合法JSON
{ "$page": "$('.js-profile')", "id": 242144, "docName": "Mr. test", "gender": "test", "testid": -1, "testPlanId": -1, "tesstspecialty": "doctor", "date": null, "isPatientExisting": false, "constraints": {}, "culture": "en", "isMobile": false, "isIE8": false, "isLocked": false, "isUserLoggedIn": false, "startTime": "3/30/2018", "dateFormatString": "{0}-{1}-{2}", "searchUrl": "/search?address..." }
批量处理的小技巧(如果经常遇到这类情况)
要是你需要处理大量类似的非规范JSON,可以用一段简单的JavaScript脚本自动处理(注:这个脚本适用于类似结构的场景,复杂嵌套可能需要微调):
function fixInvalidJson(str) { // 给所有符合规则的键加上双引号 str = str.replace(/([a-zA-Z\$][a-zA-Z0-9\$]*):/g, '"$1":'); // 给非数字、非null/布尔值的字符串值加双引号 str = str.replace(/: ([^",{\[\]}\s\d\-nullfalsetrue]+)/g, ': "$1"'); // 单独处理带斜杠的日期格式字符串 str = str.replace(/: (\d+\/\d+\/\d+)/g, ': "$1"'); return str; } // 测试示例 const invalidJson = "{ $page: $('.js-profile'), id: 242144, docName: Mr. test, gender: test, testid: -1, testPlanId: -1, tesstspecialty: doctor, date: null, isPatientExisting: false, constraints: {}, culture: en, isMobile: false, isIE8: false, isLocked: false, isUserLoggedIn: false, startTime: 3/30/2018, dateFormatString: {0}-{1}-{2}, searchUrl: /search?address..."; console.log(fixInvalidJson(invalidJson));
这个脚本能自动完成大部分重复的加引号工作,要是你的字符串里有特殊字符(比如嵌套引号),再手动微调下就行。
内容的提问来源于stack exchange,提问作者Jaykesh Patel
相关产品推荐
相关产品推荐

