首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C#] 上位机开发个人笔记 Json解析为Dictionary

[C#] 上位机开发个人笔记 Json解析为Dictionary

作者头像
科控物联
发布2022-04-19 14:04:43
发布2022-04-19 14:04:43
71000
代码可运行
举报
文章被收录于专栏:科控自动化科控自动化
运行总次数:0
代码可运行

Json分析器

在WebApi接口对接时,简单的接口可能不想写Model类,而又需要拿到Json结果中的值。或者接口返回具有多种模式,例如正常返回和异常返回不同。这些场景,都可以利用Json分析器JsonParser,把Json字符串解析为IDictionary<String,Object> 和 IList<Object> 构成的字典树。理论上,任意Json数据都可以用 IDictionary<String,Object> 和 IList<Object> 嵌套来表示。

源数据json格式。(主要是4个电能表数据)

代码语言:javascript
代码运行次数:0
运行
复制
Topic[ModbusTcp01] {
  "__startTime": "2022-03-17 18:05:20",
  "__name": "ModbusTcp01",
  "__description": "编号0001",
  "__config": "[ModbusTcp] [ModbusTcp01] [127.0.0.1:502]",
  "__success": 2322496,
  "__failed": 0,
  "__activeTime": "2022-03-24 11:24:49",
  "__captureSpendTime": 88,
  "__deviceStatus": true,
  "__requestEnable": true,
  "__onlineTime": "2022-03-17 18:05:22",
  "__failedMsg": "",
  "__alarmCount": {
    "AlarmCount": 12,
    "Hint": 0,
    "Warn": 0,
    "Error": 12,
    "Fatal": 0
  },
  "Ua": 2215,
  "Ub": 2164,
  "Uc": 2220,
  "Ia": 1203,
  "Ib": 1466,
  "Ic": 574,
  "In": 2217,
  "P": 2031,
  "Pa": 1091,
  "Pb": 1491,
  "Pc": 1361,
  "Q": 2207,
  "Qa": 1726,
  "Qb": 2220,
  "Qc": 2071,
  "S": 1947,
  "Sa": 983,
  "Sb": 506,
  "Sc": 1033,
  "PSum": 1353,
  "PFa": 2186,
  "PFb": 1473,
  "PFc": 1723,
  "Uab": 3782,
  "Ubc": 3714,
  "Uca": 3704,
  "Fa": 5031,
  "Fb": 4966,
  "Fc": 4907,
  "EpP": 696091,
  "EqP": 314,
  "EpN": 0,
  "EqN": 0,
  "a2": {
    "Ua": 2215,
    "Ub": 2164,
    "Uc": 2220,
    "Ia": 1203,
    "Ib": 1466,
    "Ic": 574,
    "In": 2217,
    "P": 2031,
    "Pa": 1091,
    "Pb": 1491,
    "Pc": 1361,
    "Q": 2207,
    "Qa": 1726,
    "Qb": 2220,
    "Qc": 2071,
    "S": 1947,
    "Sa": 983,
    "Sb": 506,
    "Sc": 1033,
    "PSum": 1353,
    "PFa": 2186,
    "PFb": 1473,
    "PFc": 1723,
    "Uab": 3782,
    "Ubc": 3714,
    "Uca": 3704,
    "Fa": 5031,
    "Fb": 4966,
    "Fc": 4907,
    "EpP": 696091,
    "EqP": 314,
    "EpN": 0,
    "EqN": 0
  },
  "a3": {
    "Ua": 2215,
    "Ub": 2164,
    "Uc": 2220,
    "Ia": 1203,
    "Ib": 1466,
    "Ic": 574,
    "In": 2217,
    "P": 2031,
    "Pa": 1091,
    "Pb": 1491,
    "Pc": 1361,
    "Q": 2207,
    "Qa": 1726,
    "Qb": 2220,
    "Qc": 2071,
    "S": 1947,
    "Sa": 983,
    "Sb": 506,
    "Sc": 1033,
    "PSum": 1353,
    "PFa": 2186,
    "PFb": 1473,
    "PFc": 1723,
    "Uab": 3782,
    "Ubc": 3714,
    "Uca": 3704,
    "Fa": 5031,
    "Fb": 4966,
    "Fc": 4907,
    "EpP": 696091,
    "EqP": 314,
    "EpN": 0,
    "EqN": 0
  },
  "a4": {
    "Ua": 2215,
    "Ub": 2164,
    "Uc": 2220,
    "Ia": 1203,
    "Ib": 1466,
    "Ic": 574,
    "In": 2217,
    "P": 2031,
    "Pa": 1091,
    "Pb": 1491,
    "Pc": 1361,
    "Q": 2207,
    "Qa": 1726,
    "Qb": 2220,
    "Qc": 2071,
    "S": 1947,
    "Sa": 983,
    "Sb": 506,
    "Sc": 1033,
    "PSum": 1353,
    "PFa": 2186,
    "PFb": 1473,
    "PFc": 1723,
    "Uab": 3782,
    "Ubc": 3714,
    "Uca": 3704,
    "Fa": 5031,
    "Fb": 4966,
    "Fc": 4907,
    "EpP": 696091,
    "EqP": 314,
    "EpN": 0,
    "EqN": 0
  }
}

转化为字典样式:

有2层嵌套的

解析过程

主要实现代码如下,便于自己复习。

代码说明,通过MQTT取得JSON数据,解析为字典数据便于页面显示。

代码语言:javascript
代码运行次数:0
运行
复制
var mqttPayload = JsonParser.Decode(e.Payload.ToStr());
foreach (var dic in mqttPayload)
    if (dic.Value.ToDictionary().Count() > 1)//通过count判断Json的嵌套深度
    {
        var configs = dic.Value.ToDictionary();
        foreach (var pair in configs)
            keyValuePairs.AddOrUpdate(e.Topic + "/" + dic.Key + "." + pair.Key,
                pair.Value.ToString(),
                (k, v) => keyValuePairs[e.Topic + "/" + dic.Key + "." + pair.Key] =
                    pair.Value.ToString());
    }
    else
    {
        keyValuePairs.AddOrUpdate(e.Topic + "/" + dic.Key, dic.Value.ToString(),
            (k, v) => keyValuePairs[e.Topic + "/" + dic.Key] = dic.Value.ToString());
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Json分析器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档