开发者社区 > 云原生 > 正文

请教一下,MSE 网关自定义插件中,是不是不支持 json.Marshal()? 有什么方法可以替代

请教一下,MSE 网关自定义插件中,是不是不支持 json.Marshal()? 有什么方法可以替代 json.Marshal() ?

展开
收起
后端老大 2023-05-12 10:40:19 133 0
3 条回答
写回答
取消 提交回答
  • 应该是反射都不支持

    此答案来自钉钉群“MSE微服务引擎用户交流群"

    2023-05-12 12:05:32
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    在MSE网关自定义插件中,不支持json.Marshal()方法。这是因为MSE网关自定义插件使用的是C++语言编写的,而json.Marshal()方法是在Go语言中定义的,所以无法直接使用。

    但是,可以使用第三方库来实现将结构体转换成JSON字符串的功能。例如,使用go-json库中的MarshalJSON函数可以将结构体转换成JSON字符串。示例代码如下:

    import (
     "encoding/json"
     "github.com/alibaba/taobao-sdk/plugin/sdk"
    )
    
    type MyStruct struct {
     Name string `json:"name"`
     Age  int    `json:"age"`
    }
    
    func main() {
     // 创建一个MyStruct实例
     myStruct := MyStruct{Name: "Alice", Age: 18}
    
     // 将结构体转换成JSON字符串
     jsonStr, err := json.Marshal(myStruct)
     if err != nil {
      panic(err)
     }
    
     // 将JSON字符串发送给MSE网关
     response, err := sdk.SendRequest("CustomPlugin", "Hello", jsonStr)
     if err != nil {
      panic(err)
     }
    
     // 输出响应结果
     fmt.Println(response)
    }
    
    2023-05-12 11:09:12
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    MSE 网关自定义插件中是支持 json.Marshal() 的,但需要注意以下几点:

    在使用 json.Marshal() 时,需要将要序列化的结构体字段名首字母大写,否则序列化后的结果会丢失该字段。

    在使用 json.Unmarshal() 时,需要将要反序列化的结构体字段名首字母大写,否则反序列化后的结果中该字段为空。

    如果您使用 json.Marshal() 仍然出现问题,可以考虑使用第三方的 JSON 序列化库,比如 go-simplejson、json-iterator 等。同时,还可以自定义结构体的 MarshalJSON 和 UnmarshalJSON 方法来实现 JSON 序列化和反序列化。

    2023-05-12 11:09:13
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关产品

  • 微服务引擎
  • 相关电子书

    更多
    阿里Tengine网关最佳实践 立即下载
    《MSE 微服务网关》 立即下载
    微服务引擎 MSE 治理中心重磅发布 立即下载