golang如何解析未知格式json字符串(可能是json对象,可能是json数组)

一、解析json数组字符串

    data:= `[
        {
            "name": "aaa",
            "id":   "54546221"
        },
        {
            "name": "bbb",
            "id":   "89875646"
        }
    ]`
`

dataArr := []interface{}{}
err := json.Unmarshal([]byte(data), &dataArr)

二、解析json对象字符串

    data:= `{
            "name": "aaa",
            "id":   "54546221"
        }`
`
dataArr := map[string]interface{}{}
err := json.Unmarshal([]byte(data), &dataArr)

如何在未知data json格式的情况下,解析data字符串?

阅读 11.2k
4 个回答
package main

import (
    "log"

    "github.com/bitly/go-simplejson"
)

func main() {
    data := "[1,2,3,4]"
    parsed, err := simplejson.NewJson([]byte(data))
    if err != nil {
        log.Panic(err)
    }
    log.Println(parsed.GetIndex(2).MustInt())
}

这是已经实现好的库,可以实现解析JSON字符串为一个JSON的对象.
原理也很简单,Unmarshalinterface{}就行了

package main

import (
    "encoding/json"
    "log"
)

func main() {
    data := `{"a":[1,2,3,4]}`
    // data := `[1,2,3,4]`
    var target interface{}
    if err := json.Unmarshal([]byte(data), &target); err != nil {
        log.Panic(err)
    }
    // 这里需要判断他是什么类型
    retArray, ok := target.([]interface{})
    if ok {
        log.Println(retArray)
    } else {
        retMap, _ := target.(map[string]interface{})
        log.Println(retMap)
    }
}

想了下,应该是个伪命题...不可能完全未知的,最最基本也是分对象和数组
真要未知你只能用interface{}然后反射

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏