去测试地图之间的区别

时间:2016-06-15 20:07:55

标签: json go

我试图对json对象运行一些测试。目前我有一个函数来比较json字符串并输出错误消息,如果它们不匹配:

func assertJsonEqual(expected, actual string) bool {
    actualStruct := make(map[string]interface{})
    expectedStruct := make(map[string]interface{})

    json.Unmarshal([]byte(expected), &expectedStruct)
    json.Unmarshal([]byte(actual), &actualStruct)

    if !reflect.DeepEqual(expectedStruct, actualStruct) {
        log.Errorf("Expected: %#v\n but got %#v", expectedStruct, actualStruct)
        return false
    }
    return true
}

问题是这使得很难确切地看到实际工具中缺少哪个密钥或额外密钥。我正在考虑构建一个简单的地图密钥差异,但我想知道是否有现有的库已经这样做了吗?

1 个答案:

答案 0 :(得分:0)

没有现有的功能,就像5行代码。

diff := &[]string{} // initialize some storage for the diff

for _, k := range map1 { // range over one of the maps
    if _, ok := map2[k]; !ok { // check if the key from the first map exists in the second
        diff = append(diff, k)
    }
}