首页 > 其他分享 >golang json字符串转结构体

golang json字符串转结构体

时间:2024-06-12 09:11:51浏览次数:27  
标签:string err fmt golang Println json 2023 字符串

腐汝

 

随笔 - 168  文章 - 0  评论 - 2  阅读 - 89497

golang json字符串转结构体

 

1、不知道结构体类型的情况下

复制代码
func JsonStringToMap(jsonStr string) (map[string]interface{}, error) {
    //未知值类型
    m := make(map[string]interface{})
    err := json.Unmarshal([]byte(jsonStr), &m)
    if err != nil {
        fmt.Printf("Unmarshal with error: %+v\n", err)
        return nil, err
    }

    return m, nil
}


res := JsonStringToMap(response.ToJsonString())
resp, ok := res["Response"].(map[string]interface{})
if ok {
    for _, v := range resp["Machines"].([]interface {}){
        fmt.Println(v.(map[string]interface{})["Ip"])
        fmt.Println(v.(map[string]interface{})["Status"])
    }
}
复制代码

慢慢断言拆数据,属实很麻烦。

2、在知道结构体类型的情况下

复制代码
func JsonStringToMap_v2(jsonStr string)  {
    //未知值类型
    var dmrp cls.DescribeMachinesResponse

    err := json.Unmarshal([]byte(jsonStr), &dmrp)
    if err != nil {
        fmt.Printf("Unmarshal with error: %+v\n", err)
    }

    for _,v := range dmrp.Response.Machines {
        fmt.Println(*v.Ip)
        fmt.Println(*dmrp.Response.AutoUpdate)
    }
}
复制代码

相对方便多了。

 

3、刚开始找了第一种办法,感觉太麻烦,之后发现第二种办法,用了第二种办法后发现在函数的返回类型里面直接可以使用未转成json串之前的数据结构,不熟悉的代价就是花时间折腾。

 

小例子

一个通用的结构体,不管来源的类型,Data里面包含的是各种数据类型。当interface里面是一个map时,想知道map中对应的value,需要多层断言,先断出Data,获取到Data的数据后,再断process_name和identify_pid。

复制代码
package main

import (
    "encoding/json"
    "fmt"
)

type TransmittedData struct {
    Data  interface{} `json:"data"`
    Scene string      `json:"scene"`
}

func main() {
    postData := []byte(`
    {
        "data": {
            "process_name": "serverMetricExtend",
            "identify_pid": "ps -ef|grep serverMetricE|grep -v grep |awk '{print $2}'"
        },
        "scene": "process_monitor"
    }
    `)

    var transmittedData TransmittedData
    err := json.Unmarshal(postData, &transmittedData)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    data, ok := transmittedData.Data.(map[string]interface{})
    if !ok {
        fmt.Println("Error: Data is not a map")
        return
    }

    processName, ok := data["process_name"].(string)
    if !ok {
        fmt.Println("Error: Process Name is not a string")
        return
    }

    identifyPid, ok := data["identify_pid"].(string)
    if !ok {
        fmt.Println("Error: Identify PID is not a string")
        return
    }

    fmt.Println("Process Name:", processName)
    fmt.Println("Identify PID:", identifyPid)
    fmt.Println("Scene:", transmittedData.Scene)
}
复制代码

 

  分类: go 好文要顶 关注我 收藏该文 微信分享 腐汝
粉丝 - 4 关注 - 2     +加关注 0 0       « 上一篇: System is booting up. See pam_nologin(8)
» 下一篇: prometheus的sdk client_golang 使用 定时器 posted @ 2023-08-02 18:06  腐汝  阅读(351)  评论(0)  编辑  收藏  举报   会员力量,点亮园子希望 刷新页面返回顶部 登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页   【推荐】这场阿里云开发者社区有奖征文活动,期待您出文相助
【推荐】三生石上:ASP.NET Core中运行WebForms业务代码
【推荐】「指间灵动,快码加编」:通义灵码,再次降临博客园
【推荐】凡泰极客:跨越技术“鸿”沟,小程序一键生成鸿蒙App
【推荐】阿里云创新加速季,5亿补贴享不停,上云礼包抢先领   编辑推荐:
· 老生常谈!程序员为什么要阅读源代码?
· 如何安全地访问互联网
· 还在拼冗长的 WhereIf 吗?100行代码解放这个操作
· C#异步编程是怎么回事(番外)
· [WPF]Dispatcher 与消息循环 阅读排行:
· 「指间灵动,快码加编」:阿里云通义灵码,再次降临博客园
· 面试官:你讲下接口防重放如何处理?
· 如何安全地访问互联网
· 手机上玩 PC 游戏的开源项目「GitHub 热点速览」
· 【译】Visual Studio 17.10 发布了新版扩展管理器  

公告

昵称: 腐汝
园龄: 8年
粉丝: 4
关注: 2 +加关注
< 2024年6月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6

搜索

 

常用链接

最新随笔

我的标签

积分与排名

  • 积分 - 75662
  • 排名 - 20828

随笔分类

随笔档案

阅读排行榜

推荐排行榜

最新评论

    Copyright © 2024 腐汝
Powered by .NET 8.0 on Kubernetes

标签:string,err,fmt,golang,Println,json,2023,字符串
From: https://www.cnblogs.com/cheyunhua/p/18243245

相关文章

  • 【Linux系列】掌握jq:高效处理JSON数据的命令行利器
    jq是一个强大的命令行工具,以其简洁的语法和丰富的功能,成为处理JSON数据的首选。本文旨在通过实战示例,让你迅速上手jq,掌握提取信息、美化输出和数据压缩的核心技能。一、安装jq:开启高效之旅首先,确保你的系统中安装了jq。在大多数Linux发行版中,可以通过包管理器安装,例如:#Ubun......
  • 请编写一个函数void fun(char a[],char b[],int n),其功能是:删除以各字符串中指定下标
    请编写一个函数voidfun(chara[],charb[],intn),其功能是:删除以各字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。#include<stdio.h>voidfun(chara[],charb[],intn){inti,j=0;for(i=0;a[i]......
  • Exercise:JSON解析
    练习:利用某些平台(聚合API、百度A、科大讯飞API)的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cISON库对服务器的响应数据进行解析,并输出到终端。/************************************************************************************************......
  • 基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架
    #include<netinet/in.h>#include<arpa/inet.h>#include<stdio.h>#include<errno.h>#include<sys/socket.h>#include<netinet/in.h>#include<netinet/ip.h>#include<arpa/inet.h>#include<sys/socket.h&g......
  • http与cJSON练习
    http与cJSON练习/*****************************************************************************************************weather_test.c*练习tcp连接,与http协议,调用服务器接口,实现获取特定城市的天气信息,并用cJSO......
  • 利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJ
    目录题目分析代码结果题目利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端分析1.需从源代码网站GitHub或SourceForge代码网站下载cJSON库及阅读下载的README相关手册如何使用cJSON库;2.使用......
  • 网络编程练习题---利用cJSON库对服务器返回的JSON格式数据完成解析
    目录题目注意事项实现代码结果展示相关接口指引题目利用某些平台(聚合API、百度AI、科大讯飞API)的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端。注意事项1.预测的日期开始时间为2010-01-012."老黄历"API......
  • cJSON学习及简单应用小结
    JSON简介JSON(JavaScriptObjectNotation,JavaScript对象表示法)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机制造商协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。以下是JSON......
  • fastjson1
    @目录前言分析复制文件清空文件出现问题和分析问题解决分析问题再次出现问题再次分析最终结果读取文件分析poc拓宽场景极限环境poc优化修改再次优化poc的分析写入文件SafeFileOutputStream写文件java8无依赖读文件在commons-io库下的写入文件原因利用链分析组合poc出现问题和分析......
  • 飞书golang 发送机器人结构定义
    飞书golang发送机器人结构定义在Golang中,可以定义一个结构体来表示飞书(Feishu)机器人的数据。以下是一个简单的示例,展示了如何定义用于发送消息到飞书机器人的结构体:  packagemain import("bytes""encoding/json""fmt""net/http") //FeishuRobotPayl......