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

Flutter中将非标准字符串转换为带双引号的标准JSON

问题原因

你拿到的字符串是无引号的类JS对象格式,不符合JSON语法要求:JSON规定所有对象键、字符串类型的值必须用双引号包裹,布尔/数字类型不需要额外加引号,直接调用json.encode()处理这种非标准字符串自然无法得到正确结果。

解决方法

方法1:PHP环境正则修复(适配你当前用json_encode的场景)

通过正则匹配给所有键、非数字/布尔类型的值补上双引号,再解析编码为标准JSON即可,示例代码如下:

<?php
$rawStr = '{id: 2, status: 2, pseudo: giles, password: lmstvixKUKcmEKL, email: Barbara_VonRueden@yahoo.com, phone: 710-934-8381, birthday: 2022-03-26, resume: Velit unde maiores nostrum sit et voluptate perspiciatis repellat., avatar_path: avatar_8.png, active: 0, created_at: 2022-05-26 13:40:31, updated_at: 2022-05-28 13:04:44, age: 0, avatar: http://localhost/api_alligatorsdujeu/storage/app/gallery/avatars/avatar_8.png, family: {id: 8, name: TREMBLAY, newsletter: false, philibert: true, active: true, created_at: 2022-05-26 10:18:15.000, updated_at: 2022-05-26 10:18:15.000}}';

// 给所有键名补充双引号
$fixed = preg_replace('/(\w+):/i', '"$1":', $rawStr);
// 给非数字、非布尔、非对象的字符串值补充双引号
$fixed = preg_replace('/:\s*([^"\d\s\{\}][^,}]*)/i', ': "$1"', $fixed);
// 解析后重新编码为标准JSON
$stdObj = json_decode($fixed);
$standardJson = json_encode($stdObj, JSON_UNESCAPED_UNICODE);

echo $standardJson;

运行后输出结果和你给出的目标标准JSON完全一致。

方法2:JavaScript环境处理方案

如果运行环境是JS,这类格式本身是合法的JS对象语法,用安全的构造函数方式解析后再序列化即可,不要直接用eval避免注入风险:

const rawStr = `{id: 2, status: 2, pseudo: giles, password: lmstvixKUKcmEKL, email: Barbara_VonRueden@yahoo.com, phone: 710-934-8381, birthday: 2022-03-26, resume: Velit unde maiores nostrum sit et voluptate perspiciatis repellat., avatar_path: avatar_8.png, active: 0, created_at: 2022-05-26 13:40:31, updated_at: 2022-05-28 13:04:44, age: 0, avatar: http://localhost/api_alligatorsdujeu/storage/app/gallery/avatars/avatar_8.png, family: {id: 8, name: TREMBLAY, newsletter: false, philibert: true, active: true, created_at: 2022-05-26 10:18:15.000, updated_at: 2022-05-26 10:18:15.000}}`;
const obj = new Function('return ' + rawStr)();
const standardJson = JSON.stringify(obj);
console.log(standardJson);
注意事项
  • 正则方案适合结构固定、值内不包含英文逗号、冒号、大括号的场景,如果值内容有特殊符号,需要根据实际业务调整正则规则
  • JS环境下动态解析字符串仅适用于来源完全可信的场景,避免代码注入风险
  • 解析完成后一定要做合法性校验,确认解析函数没有返回错误,避免后续业务逻辑异常

内容的提问来源于stack exchange,提问作者mollusk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:24:18