前言

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)
}
}
……
}

go kratos protobuf 接收动态JSON数据的更多相关文章

  1. jquery的ajax异步请求接收返回json数据

    http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...

  2. C# JToken类的使用,实现解析动态json数据、遍历、查找

    在原来解析json数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的json数据,这种方法就不使用. 为了解决动态解析js ...

  3. php 接收curl json 数据

    curl -H "Content-Type: application/json" http://127.0.0.1:8000 -X POST -d 'xxxx' php $strP ...

  4. 004-Go iris 接收post json数据

    package main import( "github.com/kataras/iris" "github.com/kataras/iris/middleware/lo ...

  5. Java发送POST请求,参数为JSON格式,并接收返回JSON数据

    原文地址:https://blog.csdn.net/qq_26975307/article/details/82713725 /** * 发送post请求 * @param url 路径 * @pa ...

  6. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  7. .net core WebAPI+EF 动态接收前台json,并动态修改数据库

    用API开发的人都知道,常用的后台接收参数就是建个DTO,然后前台把这个DTO传过来.后台再更新,例如如下例子: public async Task<IActionResult> PutM ...

  8. ArcGIS Server 10.2 实战(一)Asp.net MVC与JSON数据妙用实现动态生成要素图层

    今年7月刚刚发布的ArcGIS 10.2为GIS的web开发带来了一个很实在的功能,JSON转要素.以往GIS图层外部数据(如文本数据,数据库数据)动态地写入地图服务中的图层是一件不可想象的事情,如今 ...

  9. .net动态类型在处理json数据方面的应用

    我们在.net中处理json数据时,经常需要定义相应的类.比如json数据:{ "name" : "hello", "age" : 18 } ...

  10. 关于ThinkPHP3.2框架接收不到json数据的解决办法

    原因分析: 在tp框架中,我们经常使用的 I 方法是加过验证和默认的函数过滤的.所以我们接收的值当我们json_decode的时候就会出现空的字段 那么我们是不是又会像网上说的不用 I  方法用 $_ ...

随机推荐

  1. Python爬虫requests判断请求超时并重新post/get发送请求

    Python爬虫requests判断请求超时并重新post/get发送请求在使用Python爬虫中,你可以使用requests库来发送网络请求.为了判断请求超时并重新发送请求,你可以设置一个超时时间, ...

  2. 多语言越狱很棒!😊MULTILINGUAL JAILBREAK CHALLENGES IN🧜‍♀️LARGE LANGUAGE MODELS

    写这篇的时候第一次认识到了附录内容的重要性(bushi只是这篇读了全部的附录),它可以让你明确文章全部的实验,并且其中包含很多辅助你对正文理解的表格 禁止盗用,侵权必究!!!欢迎大家积极举报

  3. 超图SuperMap Objects的API开发中线对象和点对象查询

    注意:超图API开发中,如果将线对象和点对象都同时画在同一个CAD图层中,则在图查属性时,有可能现查询到线对象,而不能查询到点对象的信息.

  4. Web网页端IM产品RainbowChat-Web的v6.0版已发布

    一.关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIM ...

  5. JVM实战—11.OOM的原因和模拟以及案例

    大纲 1.线上系统突然由于OOM内存溢出挂掉 2.什么是内存溢出及哪些区域会发生内存溢出 3.Metaspace如何因类太多而发生内存溢出 4.无限制调用方法如何让线程的栈内存溢出 5.对象太多导致堆 ...

  6. Mysql连接报错排查解决记录

    Mysql连接报错排查解决记录 背景: 系统:uos server-1060e ​ 运行环境kvm虚拟机 ​ mysql版本:5.7.44, for Linux (x86_64) 问题现象: 宿主机重 ...

  7. Python_图片对比问题汇总

    问题一. raise OSError(f"cannot write mode {im.mode} as JPEG") from eOSError: cannot write mod ...

  8. Final Review - 返回天空的雨滴

    目录 Motivations Tricks Conclusions Algorithms And - \[\text{Each moment, now night.} \newcommand{\vct ...

  9. weixueyuan-Nginx微服务11

    https://www.weixueyuan.net/nginx/microservices/ 微服务是什么 计算机自诞生以来,极大地影响了人类的生产和社会活动,软件生产以一种生产活动的方式进入了人们 ...

  10. docker网络配置:bridge模式、host模式、container模式、none模式

    在docker平台里有四种网络模式,今天继续分享一下它们的常用知识,进一步加深对docker技术的理解. 1.docker网络模式分类 docker run创建Docker容器时,可以用--net选项 ...