第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查 JSON 是對象還是數(shù)組

檢查 JSON 是對象還是數(shù)組

Go
莫回?zé)o 2023-06-12 16:20:57
Go 中是否有一種簡單的方法來檢查給定的 JSON 是對象{}還是數(shù)組[]?首先想到的是json.Unmarshal()進(jìn)入一個界面,然后看它是不是變成了一張地圖,或者是一片地圖。但這似乎效率很低。我可以只檢查第一個字節(jié)是 a{還是 a 嗎[?或者是否有更好的方法已經(jīng)存在。
查看完整描述

3 回答

?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊

使用以下代碼檢測值中的 JSON 文本[]byte是data數(shù)組還是對象:


 // Get slice of data with optional leading whitespace removed.

 // See RFC 7159, Section 2 for the definition of JSON whitespace.

 x := bytes.TrimLeft(data, " \t\r\n")


 isArray := len(x) > 0 && x[0] == '['

 isObject := len(x) > 0 && x[0] == '{'

這段代碼處理可選的前導(dǎo)空格,比解組整個值更有效。


因為 JSON 中的頂級值也可以是數(shù)字、字符串、布爾值或 nil,所以isArray和isObject都可能計算為 false。當(dāng) JSON 無效時,值isArray和也可以評估為 false。isObject


查看完整回答
反對 回復(fù) 2023-06-12
?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗 獲得超6個贊

使用類型開關(guān)來確定類型。這類似于 Xay 的回答,但更簡單:


var v interface{}

if err := json.Unmarshal(data, &v); err != nil {

    // handle error

}

switch v := v.(type) {

case []interface{}:

    // it's an array

case map[string]interface{}:

    // it's an object

default:

    // it's something else

}


查看完整回答
反對 回復(fù) 2023-06-12
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊

使用json.Decoder.?這比其他答案有優(yōu)勢:

  1. 比解碼整個值更有效

  2. 使用官方的 JSON 解析規(guī)則,如果輸入無效則生成標(biāo)準(zhǔn)錯誤。

請注意,此代碼未經(jīng)測試,但應(yīng)該足以讓您了解。如果需要,它還可以輕松擴(kuò)展以檢查數(shù)字、布爾值或字符串。

func jsonType(in io.Reader) (string, error) {

? ? dec := json.NewDecoder(in)

? ? // Get just the first valid JSON token from input

? ? t, err := dec.Token()

? ? if err != nil {

? ? ? ? return "", err

? ? }

? ? if d, ok := t.(json.Delim); ok {

? ? ? ? // The first token is a delimiter, so this is an array or an object

? ? ? ? switch (d) {

? ? ? ? case '[':

? ? ? ? ? ? return "array", nil

? ? ? ? case '{':

? ? ? ? ? ? return "object", nil

? ? ? ? default: // ] or }, shouldn't be possible

? ? ? ? ? ? return "", errors.New("Unexpected delimiter")

? ? ? ? }

? ? }

? ? return "", errors.New("Input does not represent a JSON object or array")

}

請注意,這消耗了in. 如有必要,讀者可以復(fù)印一份。如果您嘗試從字節(jié)切片 ( ) 中讀取[]byte,請先將其轉(zhuǎn)換為讀取器:


t, err := jsonType(bytes.NewReader(myValue))


查看完整回答
反對 回復(fù) 2023-06-12
  • 3 回答
  • 0 關(guān)注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號