"invalid character '\x00' after top-level value"

I am getting this error while unmarshalling json in a for loop. The first time through the loop is unmarshalling fine but on the next iteration I am getting this error.

I am new to golang and this error message is not clear. Can someone please explain in what cases this error occurs and how I am supposed to avoid it.

3

2 Answers

Looking at the source code of encoding/json/scanner.go

// stateEndTop is the state after finishing the top-level value, // such as after reading `{}` or `[1,2,3]`. // Only space characters should be seen now. func stateEndTop(s *scanner, c int) int { if c != ' ' && c != '\t' && c != '\r' && c != '\n' { // Complain about non-space byte on next call. s.error(c, "after top-level value") } return scanEnd } 

So check how your JSON string ends.

For example, in this thread, to illustrate a potential issue:

ReadFromUDP can return a packet of any size, from 1 to 2000 bytes, you need to reslice your buffer using the number of bytes actually read.

json.Unmarshal(buf[:n], &msg) 

Same in this thread:

request := make([]byte, 1024) read_len, err := conn.Read(request) request_right := request[:read_len] j := new(Json) err := j.UnmarshalJSON(request) // not working 

if read_len < len(request) then request will contain extra "\x00" at the end and that's why UnmarshalJSON(request) won't work.

Thank you for answering my question.

This error came due to incorrect json before that there is little more story to this,

I have a field detail of type json.RawMessage I have SELECT query where I am trying to read json from the table and scan to detail and appending it to the struct.

After for loop ends when I look at detail JSON it got same record multiple times with and without end braces. After giving it so much thinking I figured casting detail with byte helped.

Eg: instead of just rows.Scan(&detail) try this: rows.Scan((*[]byte)(&detail)) solved the above problem

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like