You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:06:36