Golang:Filter Protobuf Struct fields by FieldMask

2ledvvac  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(115)

我有一个protobuf Struct存储我的arbirary json。我需要使用fmutils根据提供的字段掩码路径列表过滤并仅保留一些字段
然而,它似乎对结构类型不起作用,因为我所有的字段都消失了(我的结构变成空的)。下面的代码。我需要做其他事情吗?

package main

import (
    structpb "github.com/golang/protobuf/ptypes/struct"
    "google.golang.org/protobuf/encoding/protojson"
    "github.com/mennanov/fmutils"
)

func main() {
    jsonString := `{
                        "field_a": true,
                        "field_b": {
                            "sub_field_b": 99
                        }
                    }`

    myPbStruct := &structpb.Struct{}
    protojson.Unmarshal([]byte(jsonString), myPbStruct)

    fmutils.Filter(myPbStruct, []string{"field_a"})
    // myPbStruct becomes empty after this step
}

字符串

6rqinv9w

6rqinv9w1#

我对fmutils不熟悉。
Struct被定义为fields: map<string,Value,其中Value
所以,你需要在你的过滤器前面加上fields来过滤Value

package main

import (
    structpb "github.com/golang/protobuf/ptypes/struct"
    "github.com/mennanov/fmutils"
    "google.golang.org/protobuf/encoding/protojson"
)

func main() {
    jsonString := `{
                        "field_a": true,
                        "field_b": {
                            "sub_field_b": 99
                        }
                    }`

    myPbStruct := &structpb.Struct{}
    protojson.Unmarshal([]byte(jsonString), myPbStruct)

    fmutils.Filter(myPbStruct, []string{"fields.field_a"})
    // myPbStruct retains only 'field_a' after this step
}

字符串

相关问题