比较golang中的超集对象

时间:2018-05-18 06:20:26

标签: go

我想比较两个对象

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

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

现在我们可以看到结果是预期的超集,但是当我使用reflect.deepequal时,它表示false,因为它完全比较了两个对象。我想比较结果是否是预期的超集。

 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 个答案:

答案 0 :(得分:0)

如果没有任何改进,您可以执行类似

的操作
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)
}