GO语言 处理未知JSON数据

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"    
    "path"    
)
func main(){
    data := map[string]interface{}{
        "FirstName":"Jan",
        "Sex":18,
    }

    stu,_ := json.Marshal(&data)
    reader := bytes.NewReader(stu)
    fmt.Println(reader)
    fmt.Println(stu)
    fmt.Println(data)
    //content := readFileFrompath("./test.json")//文件方式
    //_ = json.Unmarshal(content, &f)
    content :=`{"FirstName":"Jan","LastName":"Kersschot","Addresses":[{"Type":"private","City":"Aartselaar","Country":"Belgium"},{"Type":"work","City":"Boom","Country":"Belgium"}],"Remark":"none","acc":{"Type":"private","City":"Aartselaar","Country":"Belgium"}}`//字符串方式
    var f interface{}
    _ = json.Unmarshal([]byte(content), &f)
    m := f.(map[string]interface{})
    fmt.Println(f)
    /*方式1*/
    if m["acc"] !="" {
        acc := m["acc"].(map[string]interface{})
        fmt.Println(acc["City"])
    }
    if m["Addresses"] != ""{
        Addresses :=m["Addresses"].([]interface{})
        fmt.Println(Addresses)
        for k,v := range Addresses {
            row := v.(map[string]interface{})
            fmt.Println(k,v,row["City"],row["Country"],row["Type"])
        }
    }
    /*方式2*/
    for k,v := range m{
        switch v.(type) {
        case []interface{}:
            rows :=v.([]interface{})
            for sk,sv :=range rows{
                son :=sv.(map[string]interface{})
                for tk,tv :=range son{
                    fmt.Println("k:",k,"----sk:",sk,"----tk:",tk,"----tv:",tv)
                }
            }
        case map[string]interface{}:
            rows :=v.(map[string]interface{})
            for sk,sv :=range rows {
                fmt.Println("k:",k,"----sk:",sk,"----sv:",sv)
            }
        default:
            fmt.Println("k:",k,"----v:",v)
        }

    }


}
/*读取文件内容*/
func readFileFrompath(path string) []byte {
    content, err := ioutil.ReadFile(path)
    if err != nil {
        log.Println(err)
    }
    return content
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值