由于编码,解组返回空白对象

I'm attempting to unmarshal a raw json string. There seems to be an error with encoding but I can't quite figure it out.

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

type Foo struct {
    Transmission string `json:"transmission"`
    Trim         string `json:"trim"`
    Uuid         string `json:"uuid"`
    Vin          string `json:"vin"`
}

func main() {

    var foo Foo

    sample := `{
        "transmission": "continuously\x20variable\x20automatic",
        "trim": "SL",
        "uuid" : "6993e4090a0e0ae80c59a76326e360a1",
        "vin": "5N1AZ2MH6JN192059"
    }`

    err := json.Unmarshal([]byte(sample), &foo)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(foo)

}

2009/11/10 23:00:00 invalid character 'x' in string escape code

It works if transmission entry is removed.

Here is a working playground.

Your input is not valid JSON. The JSON spec states that

All code points may be placed within the quotation marks except for the code points that must be escaped: quotation mark (U+0022), reverse solidus (U+005C), and the control characters U+0000 to U+001F.

Additionally, although there are two-character escape sequences, \x is not one of them, and thus it is being correctly interpreted as an invalid escape sequence by the Go parser. If you want to have a backslash literal in your JSON, it needs to be represented by \\ in the JSON input itself. See a modified version of your example: https://play.golang.org/p/JZdPJGpPR5q

(note that this is not an issue with your Go string literal since you're already using a raw (``) string literal—the JSON itself needs to have two backslashes.)

You can replace \x with \\x using string.Replace() function. Then, Unmarshal the replaced string. Here is a working example.