douyeyan0650 2018-05-18 06:20
浏览 93

在Golang中比较超集对象

I want to compare two objects

expected:= `"{\"method\":\"GET\",\"body\":{},\"uploadCount\":0}"` 

result := `"{\"name\":\"xyz\",\"method\":\"GET\",\"body\":{},\"uploadCount\":0}"`

Now as we can see result is super-set of expected but when I use reflect.deepequal, it says false because it exactly compare two objects. I want to compare if result is superset of expected or not.

 func main(){

    result := "{\"name\":\"xyz\",\"method\":\"GET\",\"body\":{},\"uploadCount\":0}"

    expected := "{\"method\":\"GET\",\"body\":{},\"uploadCount\":0}" 

    var _result interface{}
    var _expected interface{}
    json.Unmarshal([]byte(result),&_result)
    json.Unmarshal([]byte(expected),&_expected)

    reflect.deepequal(_result,_expected)

}
  • 写回答

1条回答 默认 最新

  • duanmu0834 2018-05-18 12:39
    关注

    Without any refinements you could do something like

    func main() {
    
        result := "{\"name\":\"xyz\",\"method\":\"GET\",\"body\":{},\"uploadCount\":0}"
    
        expected := "{\"method\":\"GET\",\"body\":{},\"uploadCount\":0}"
    
        var _result map[string]interface{}
        var _expected map[string]interface{}
    
        json.Unmarshal([]byte(result), &_result)
        json.Unmarshal([]byte(expected), &_expected)
    
        isSuperset := true
    
        for k, v := range _expected {
            if !reflect.DeepEqual(v, _result[k]) {
                isSuperset = false
                break
            } 
        }
    
        fmt.Println(isSuperset)
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算