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

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

如何判斷 []byte 是數(shù)組還是單個對象

如何判斷 []byte 是數(shù)組還是單個對象

Go
交互式愛情 2023-07-31 15:44:55
我正在創(chuàng)建一個 API,它將接收特定路由中的對象。在這條路線中,我可以接收單個物體或大部分物體。例子:  [{"foo":"bar"}]  {"foo":"bar"}我如何知道主體請求是 de 之前的切片還是單個對象json.Unmarshal。此外,如果這是不可能的,接受這兩種類型的正文請求并將其轉(zhuǎn)換為對象列表的最佳方法是什么?我期望這樣的事情:  type Foo struct {    Foo string `json:"foo"`  }  func Bla() []Foo {    fakeBody := []byte(`[{"foo":"bar"}]`)    fakeBody2 := []byte(`{"foo":"bar"}`)         var foo []Foo    // If fakeBody contains a array of objects    // then parse it to the foo slice variable normally    // So, if the fakeBody2 is a single object then     // parse this single object to the foo slice that will contain only    // one element.    return foo  }
查看完整描述

3 回答

?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

在這種情況下,我會考慮按以下順序執(zhí)行以下操作:

  • 您可以讀取正文,并檢查第一個非空格字符以查看它是否是“[”或“{”,并據(jù)此進行解組。

  • 您可以首先將其解組為數(shù)組,如果失敗,則將其解組為單個對象。

  • 您可以解組到接口{},執(zhí)行類型斷言,然后自行解析內(nèi)容。


查看完整回答
反對 回復(fù) 2023-07-31
?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

檢查第一個非空白字節(jié)以確定 JSON 文檔是數(shù)組還是對象。相應(yīng)地解碼。


func decode(body []byte) ([]Foo, error) {

    b = bytes.TrimLeft(body, " \t\n\r")

    if len(b) > 0 && b[0] == '[' {

        var v []Foo

        err := json.Unmarshal(body, &v)

        return v, err

    }

    var v [1]Foo

    err := json.Unmarshal(body, &v[0])

    return v[:], err

}


查看完整回答
反對 回復(fù) 2023-07-31
?
MMTTMM

TA貢獻1869條經(jīng)驗 獲得超4個贊

為什么不直接添加 the [and]如果它不是他們的,然后始終將其視為數(shù)組?


body := []byte(`{"foo":"bar"}`)

body = bytes.TrimSpace(body)

if len(body) > 0 && body[0] != '[' {

    tmp := make([]byte, len(body)+2, len(body)+2)

    tmp[0] = '['

    tmp[len(tmp)-1] = ']'

    copy(tmp[1:len(tmp)-1], body)

    body = tmp

}

https://play.golang.org/p/YfnLgN9q64F


或者,首先創(chuàng)建數(shù)組,然后根據(jù)第一個字符編組到數(shù)組或第一項:


f := make([]Foo, 1)

body := []byte(`{"foo":"bar"}`)

if len(body) > 0 && body[0] != '[' {

    json.Unmarshal(body, &f[0])

} else {

    json.Unmarshal(body, &f)

}

fmt.Println(f)

https://play.golang.org/p/1fxBKH3ZJyH


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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