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

升级pusher.com库后收到等号分隔JSON,是否合规及如何解析

格式合法性判定

你收到的内容不是合法JSON格式。
标准JSON规范明确要求:

  • 键名必须用双引号包裹
  • 键和值之间必须用冒号:分隔
  • 字符串值必须用双引号包裹
    你收到的内容本质是.NET对象调用ToString()方法后的调试输出格式,不是服务端返回的原始数据。
问题根因

这是升级后的Pusher .NET客户端库的API行为变更导致的:

  • 旧版库回调时返回的是服务端下发的原始JSON字符串,你直接打印就会显示标准JSON
  • 新版库默认会自动将服务端下发的JSON解析为结构化事件对象,你直接对事件对象调用ToString()或者直接打印时,输出的就是对象的调试字符串,也就是你现在看到的用=分隔键值、顶级键无引号的格式
    服务端完全没有改动,不需要排查服务端逻辑。
解决方案

优先方案:直接使用库提供的结构化属性

新版库已经帮你完成了反序列化操作,不需要你自己再做JSON解析,直接取事件对象的对应属性即可:

// 假设你事件回调的参数名为pusherEvent
// 直接取对应属性即可,无需反序列化
string eventName = pusherEvent.Event;
string channelName = pusherEvent.Channel;
string userId = pusherEvent.UserId;
// Data字段是服务端下发的data段原始JSON,可按需解析
JObject messageData = JObject.Parse(pusherEvent.Data);

备选方案:获取原始JSON自行解析

如果你的业务逻辑需要用到完整的原始JSON字符串,可以直接调用事件对象的原始数据属性(不同版本库的属性名可能为Raw/RawData/OriginalJson,可查看当前使用的Pusher库版本的对象定义确认):

string rawJson = pusherEvent.Raw;
// 拿到的rawJson就是和旧版一致的标准JSON,可以正常反序列化
var fullEvent = JsonConvert.DeserializeObject<YourEventModel>(rawJson);

不推荐的兼容方案:手动转换格式

如果实在无法获取原始属性,才考虑用字符串替换的方式把当前格式转换为合法JSON,该方案容错性低,仅做应急使用:

// 仅应急使用,优先用上面两种方案
string invalidFormatStr = yourCurrentString;
// 替换=为:
var jsonStr = invalidFormatStr.Replace(" = ", ": ");
// 给顶级无引号的键加双引号(正则匹配处理)
jsonStr = Regex.Replace(jsonStr, @"([\w_]+)(?=\s*:)", "\"$1\"");
// 处理空值的user_id
jsonStr = jsonStr.Replace("user_id:  ", "user_id: \"\"");
// 再做反序列化
var result = JsonConvert.DeserializeObject<YourModel>(jsonStr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:54:01