代码之家  ›  专栏  ›  技术社区  ›  Serg Chernata

解组由于编码而返回空对象

go
  •  -1
  • Serg Chernata  · 技术社区  · 6 年前

    我正试图解开一个原始的 json 字符串。似乎有一个编码错误,但我不能完全弄清楚。

    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字符串转义码中的无效字符“x”

    如果变速器入口被拆下,它就会工作。

    Here is a working playground

    2 回复  |  直到 6 年前
        1
  •  4
  •   Carson Hoffman    6 年前

    您的输入不是有效的JSON。这个 JSON spec 声明

    除必须转义的代码点(引号(U+0022)、反斜线(U+005C)和控制字符U+0000到U+001F外,所有代码点都可以放在引号内。

    另外,虽然有两个字符转义序列, \x 不是其中之一,因此它被Go解析器正确地解释为无效的转义序列。如果您想在JSON中有一个反斜杠文本,它需要用 \\ 在JSON输入本身中。请参见示例的修改版本: https://play.golang.org/p/JZdPJGpPR5q

    (请注意,这不是Go字符串文本的问题,因为您已经在使用原始字符串( `` )字符串literalJSON本身需要有两个反斜杠。)

        2
  •  0
  •   Emruz Hossain    6 年前

    你可以替换 \x 具有 \\x 使用 string.Replace() 功能。然后,解组替换的字符串。 Here is a working example.