方法1

Go语言:读取一个未知的Json(支持数组型Json)

package main

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

func UnknownJson(data string) {
    if data != `` {
        r := strings.NewReader(data)
        dec := json.NewDecoder(r)
        switch data[0] {
        case 91:
            // "[" 开头的Json(数组型Json)
            param := []interface{}{}
            dec.Decode(&param)
            fmt.Println(param)
            // fmt.Println(param[0])                      // 使用一个值
            // println(reflect.TypeOf(param[0]).String()) // 获取值的类型
        case 123:
            // "{" 开头的Json(对象型Json)
            param := make(map[string]interface{})
            dec.Decode(&param)
            fmt.Println(param)
            // fmt.Println(param[`a`])                      // 使用一个值
            // println(reflect.TypeOf(param[`a`]).String()) // 获取值的类型
        }
    }
}

func main() {
    UnknownJson(`{"a":1}`)
    UnknownJson(`[{"a":1},{"b":2}]`)
    UnknownJson(`[1,2,3,4]`)
}

 

 

 

 

方法2

当未知JSON数据时:

https://blog.csdn.net/qq_41629756/article/details/101539625

  1. package main
  2. import (
  3. “encoding/json”
  4. “fmt”
  5. “io/ioutil”
  6. “log”
  7. )
  8. func readFileFrompath(path string) []byte {
  9. content, err := ioutil.ReadFile(path)
  10. if err != nil {
  11. log.Println(err)
  12. }
  13. return content
  14. }
  15. func main() {
  16. content := readFileFrompath(“./vcard.json”)
  17. var f interface{}
  18. _ = json.Unmarshal(content, &f)
  19. m := f.(map[string]interface{})
  20. for k, v := range m {
  21. // 处理json数据
  22. fmt.Println(k)
  23. fmt.Println(v)
  24. }
  25. }

其中 vcard.json文件中数据为

{"FirstName":"Jan","LastName":"Kersschot","Addresses":[{"Type":"private","City":"Aartselaar","Country":"Belgium"},{"Type":"work","City":"Boom","Country":"Belgium"}],"Remark":"none"}

结果为

FirstName
Jan
LastName
Kersschot
Addresses
[map[City:Aartselaar Country:Belgium Type:private] map[City:Boom Country:Belgium Type:work]]
Remark
none

因为在学习的过程中,有人提出了相关问题,所以在此随笔记录一下启到抛砖引玉的作用,。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注