我不能使用golang来解析带有服务器响应的json:

1
2
3
4
{
"id": 1,
"description":"{"uDes":"","reDes":[{"des":"aaa,,request=<?xml version="1.0" encoding="GBK"?><Req ver="3.0"><HR version="3.0" cd="0"><src><\\\\/src><license><\\\\/license><clientid>com.sample.xo<\\\\/clientid><ii>8603<\\\\/ii><im>46002910<\\\\/im><uuid>da032b2<\\\\/uuid><reqid>-21851<\\\\/reqid><smc>44:91<\\\\/smc><sdv>2.0.201501131131.a.r<\\\\/sdv><corv>V1.1.0r<\\\\/corv><\\\\/HDR><DRR nettype="LTE" inftype="1"><mc>460<\\\\/cc><mnc>00<\\\\/mnc><lac>34809<\\\\/lac><cellid>8842241<\\\\/cellid><signal>-69<\\\\/signal><\\\\/DRR><\\\\/Cell_Req>&retype=3&timestamp=1469550331136"}]}"
}

请注意,键" description"具有很多非法字符。我只想将其作为字符串存储在我们的数据库中。
go代码片段如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import (
  "fmt"
  "net/http"
  "encoding/json"
)
var p := fmt.Println
type DataSlice struct{
     Id int
     Destription string
}
func main() {
    p("Start fetching data..")
    resp,err := http.Get("http://127.0.0.1/pis")
    if err != nil{
    //handle error
       p(err)
    }else{
       defer resp.Body.Close()
       var jsonInst DataSlice
       p("Start decode json body..")
       err := json.NewDecoder(resp.Body).Decode(&jsonInst)
       if err != nil {
         panic(err)
       }else{
         //do insert here
       }
    }
}

此代码执行正常,但描述值为空。请帮助我解决此问题。 非常感谢!

  • 您有一个错字Destription != Description
  • 谢谢你吉姆..我还没有检查这个映射键。 :)

请注意,您在DataSlice结构中有一个错字-Destription而不是Description。 请参阅PlayGround中的以下示例,该示例成功解析了JSON Blob-https://play.golang.org/p/CeoCH2SJXh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

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

var input = `{
"id": 1,
"description":"{"uDes":"","reDes":[{"des":"aaa,,request=<?xml version="1.0" encoding="GBK"?><Req ver="3.0"><HR version="3.0" cd="0"><src><\\\\/src><license><\\\\/license><clientid>com.sample.xo<\\\\/clientid><ii>8603<\\\\/ii><im>46002910<\\\\/im><uuid>da032b2<\\\\/uuid><reqid>-21851<\\\\/reqid><smc>44:91<\\\\/smc><sdv>2.0.201501131131.a.r<\\\\/sdv><corv>V1.1.0r<\\\\/corv><\\\\/HDR><DRR nettype="LTE" inftype="1"><mc>460<\\\\/cc><mnc>00<\\\\/mnc><lac>34809<\\\\/lac><cellid>8842241<\\\\/cellid><signal>-69<\\\\/signal><\\\\/DRR><\\\\/Cell_Req>&retype=3&timestamp=1469550331136"}]}"
}`

var p = fmt.Println

type DataSlice struct {
    Id          int
    Description string
}

func main() {
    var inst DataSlice
    p("Start decode json body..")
    err := json.NewDecoder(strings.NewReader(input)).Decode(&inst)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%#v
", inst)
}

输出:

1
2
3
Start decode json body..

main.DataSlice{Id:1, Description:"{"uDes":"","reDes":[{"des":"aaa,,request=<?xml version="1.0" encoding="GBK"?><Req ver="3.0"><HR version="3.0" cd="0"><src><\\\\/src><license><\\\\/license><clientid>com.sample.xo<\\\\/clientid><ii>8603<\\\\/ii><im>46002910<\\\\/im><uuid>da032b2<\\\\/uuid><reqid>-21851<\\\\/reqid><smc>44:91<\\\\/smc><sdv>2.0.201501131131.a.r<\\\\/sdv><corv>V1.1.0r<\\\\/corv><\\\\/HDR><DRR nettype="LTE" inftype="1"><mc>460<\\\\/cc><mnc>00<\\\\/mnc><lac>34809<\\\\/lac><cellid>8842241<\\\\/cellid><signal>-69<\\\\/signal><\\\\/DRR><\\\\/Cell_Req>&retype=3&timestamp=1469550331136"}]}"}