首页 > 其他分享 >go kratos protobuf 接收动态JSON数据

go kratos protobuf 接收动态JSON数据

时间:2023-08-10 21:11:57浏览次数:45  
标签:google kratos protobuf err json JSON data Struct

前言

google.protobuf.StructGoogle Protocol Buffers 中的一种特殊类型,用于表示动态的键值对数据。它可以存储任意类型的数据,并提供了方便的方法来访问和操作这些数据。

Struct 类型通常用于在不事先知道数据结构的情况下传递和处理配置、参数或其他动态数据。

https://pkg.go.dev/google.golang.org/protobuf/types/known/structpb

代码示例

以下代码,引入了 google/protobuf/struct.proto,该文件定义了 google.protobuf.Struct 类型。

在 UpdateBookRequest 消息中,字段 data 使用 google.protobuf.Struct 类型定义。

syntax = "proto3";

import "google/protobuf/struct.proto";

message UpdateBookRequest {
  google.protobuf.Struct data = 1;
}

Kratos 框架,Service 实现方法中,接收 UpdateBookRequest,这时它的 pb 文件中定义为 Data *structpb.Struct protobuf:"bytes,1,opt,name=data,proto3" json:"data"

func (s *myService) UpdateBook(ctx context.Context, req *api.UpdateBookRequest) (*api.UpdateBookReply, error) {
    ……
    // 接收 data bytes 数据,转化为 json
    data, err := json.Marshal(req.Data)
	if err != nil {
		panic(err)
	}

    ……
    // 将 json 数据,转化为结构体
	scene := &structpb.Struct{}  
    // 这里有一个非 null 判断,其中 app.Data 为数据库中查询
	if !bytes.Equal(app.Data, []byte("null")) {  
	   err = json.Unmarshal(app.Data, scene)  
	   if err != nil {  
	    panic(err)
	   }  
	}
    ……
}

标签:google,kratos,protobuf,err,json,JSON,data,Struct
From: https://www.cnblogs.com/niuben/p/17621448.html

相关文章

  • 借助Aspose.Html 将 HTML 模板与 XML 或 JSON 合并
    在现代网络开发中,内容和表示的分离是一个基本原则。HTML模板提供了一种定义网页结构和布局的便捷方法,而JSON和XML数据格式通常用于存储和传输结构化信息。结合这些技术,开发人员可以根据外部源的数据动态生成HTML内容。在这篇博文中,我们将探讨如何在Java中将HTML模板与JS......
  • 8.利用Filebeat收集Nginx的Json格式访问日志和错误日志到Elasticsearch
    生产环境中经常需要获取Web访问用户的信息,比如:网站的PV,UV,状态码,用户来自哪个地区,访问时间等可以通过收集的Nginx的访问日志实现默认Nginx的每一次访问生成的访问日志是一行文本,ES没办法直接提取有效信息,不利于后续针对特定信息的分析可以将Nginx访问日志转换为JSON......
  • springboot~alibaba.fastjson2序列化时过滤字段
    当我们使用阿里的alibaba.fastjson2进行json序列化时,你可以通过方法参数PropertyFilter来实现对字段的获取,将需要序列化的字段写到PropertyFilter对象里,当然也可以将不进行序列化的写到这里,进行逻辑非操作即可实体classPerson{privateStringfirstName;privateStr......
  • 关于package-lock.json
    前言上篇文章我们了解了package.json,一般与它同时出现的还有一个package-lock.json,这两者又有什么关系呢?下面一起来了解吧。介绍package-lock.json它会在npm更改node_modules目录树或者package.json时自动生成的,它准确的描述了当前项目npm包的依赖树,并且在随后的安装......
  • JavaScript 对象和 JSON 的区别
    参考原文:https://blog.csdn.net/jiaojiao772992/article/details/77871785/2.1对象和JSON的区别JSON就是JavaScriptobjectnotation,JS对象表示法,是JS对象的严格子集。区别就是引号:JSON要求所有的属性名(键)必须加双引号“”,而JS对象实际上不要求双引号。这就是一个标准......
  • delphi 自带的JSON序列化类
    unitUnit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,System.JSON.Serializers,Vcl.StdCtrls;typeTForm1=class(TForm)Memo1:TMemo......
  • 快速了解JavaScript的JSON
    JSON是用于存储和传输数据的格式。JSON通常用于服务端向网页传递数据。1什么是JSON?JSON英文全称 JavaScript Object NotationJSON是一种轻量级的数据交换格式。JSON是独立的语言 *JSON易于理解。2JSON语法基本上JSON对象就是基于JavaScript对象,因......
  • NETCORE - 读取 appsettings.json 配置数据
    NETCORE-读取appsettings.json配置数据 环境:net6 webapi 1. 配置appsettings.json数据{"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warn......
  • Jackson —— json转换工具
    一、介绍1.一个可以实现JSON字符串和Java对象进行转换的工具类2.转换的核心类是ObjectMapper 二、ObjectMapper常用的两个方法方法名称说明publicStringwriteValueAsString(Objectobj)将一个对象转换为json字符串publicTreadValue(Stringjson,Classclaz......
  • java解析json
    {"status":0,"message":"ok","total":2,"results":[{"name":"蓝光COCO金沙","location":{"lat":30.68754......