Краткая история: Как я могу сравнить два куска JSON? Ниже приведен код ошибки.Как сравнить два запроса JSON?
var j, j2 interface{}
b := []byte(srv.req)
if err := json.Unmarshal(b, j); err !=nil{
t.Errorf("err %v, req %s", err, b)
return
}
d := json.NewDecoder(r.Body)
if err := d.Decode(j2); err !=nil{
t.Error(err)
return
}
if !reflect.DeepEqual(j2, j){
t.Errorf("j %v, j2 %v", j, j2)
return
}
Длинная история: Я делаю некоторые E2e тестирование и часть этого мне нужно сравнить запрашиваемую JSON тело с полученным JSON. Для этого я попытался развязать ожидаемый и полученный json с пустым интерфейсом (во избежание ошибок какого-либо типа), но я получаю сообщение об ошибке: json: Unmarshal(nil)
. Я предполагаю, что кодировка/json не нравится пустой интерфейс, поэтому вопрос заключается в том, как сравнить два куска JSON? Сравнение строк будет подвержено ошибкам, поэтому я пытаюсь избежать этого.
* Я думаю * вам просто нужно изменить свое заявление на 'J, J2: = карта [строка] интерфейс {} {}, отображение [ строка] интерфейс {} {} '. Я * знаю *, вы хотите, чтобы в одиночном примере был наилучший шанс на хороший ответ на SO. :) – twotwotwo
Нет, мой первоначальный комментарий был неправильным; это то, что вам нужно передать указатели в 'Decode' /' Unmarshal' (все примеры по-прежнему помогают!). – twotwotwo