我尝试使用此代码来解析它,但content似乎为空,而err为false。 request.URL.Query()打印一个漂亮的地图对象。

1
2
3
4
5
6
7
8
9
v := reflect.ValueOf(request.URL.Query())
i := v.Interface()
content, err := i.(map[interface{}]interface{})

// Do some operations

jsonString, _ := json.Marshal(content)

// Add to DB

为什么它为空? 我也觉得太通用了吗?


content, err := i.(map[interface{}]interface{}),这不是强制类型转换,而是类型断言。 您是在说(断言)该接口的类型为map[interface{}]interface{},不是。 类型为map[string][]string。 您将获得null作为值,因为它失败了。 我高度怀疑error是错误的。

您是否认为过于笼统? 当然可以 我想不出集合类型需要更改的任何原因...追加所需内容,将其写入数据库。 没有什么可以防止这种afaik?

  • 处理真正动态的JSON的正确方法是什么?
  • @Thellimist map[string]interface{}可能是最流行的方式。 就我个人而言,我总是避免动态形式的解组。 我很自信地说没有json是真正动态的。 总有一个模式,它可能很灵活。 在您的代码中从来没有必要进行反射,只有在真正的解组器中才需要进行反射(在这种情况下为encoding / json,但对于其他Go语言和其他语言的库也是如此)。 另外,如果json是变体,我可以尝试TypeA然后B然后C来耗尽可能的模式,最坏的情况下我会这样做。 提前解决我的错误。