簡體   English   中英

在不使用結構的情況下將JSON轉換為地圖切片並將地圖切片轉換為Go

[英]Converting json to slice of maps and slice of maps to json in Go without using structs

我正在嘗試將json字符串從http請求轉換為map / s的切片。 而且我還應該將map / s的一部分轉換為json字符串以用於http響應。

我想在以下兩種情況下將以下內容轉換為地圖片段。 來自http請求的json字符串可能是幾個相同鍵值json對象的數組,例如;

[
        { title: 'JavaScript: The Good Parts', author: 'Douglas Crockford',
          releaseDate: '2008', keywords: 'JavaScript Programming' },
        { title: 'The Little Book on CoffeeScript', author: 'Alex MacCaw',
          releaseDate: '2012', keywords: 'CoffeeScript Programming' },
        { title: 'Scala for the Impatient', author: 'Cay S. Horstmann',
          releaseDate: '2012', keywords: 'Scala Programming' },
        { title: 'American Psycho', author: 'Bret Easton Ellis',
          releaseDate: '1991', keywords: 'Novel Splatter' },
        { title: 'Eloquent JavaScript', author: 'Marijn Haverbeke',
          releaseDate: '2011', keywords: 'JavaScript Programming' }
]

或一個像

{ title: 'Eloquent JavaScript', author: 'Marijn Haverbeke',
  releaseDate: '2011', keywords: 'JavaScript Programming' }

第二項任務是將map / s的一部分轉換為json字符串。

但是,我無法成功完成這兩個過程。

我知道json包使對結構執行這兩項任務成為可能。

出於設計方面的考慮,我不應該使用預先編碼的結構。

在Go中是否有已知的方法可以做到這些。

您確實可以使用use map[string]interface{} ,它將與{ "title": ....., "keywords": ["CoffeeScript", "Programming"] }

您必須使用類似:

for i := 0; i < len(b); i++ {
    fmt.Printf("%s by %s was release at %s\n", b[i]["title"], b[i]["author"])
    switch v := b[i]["keywords"].(type) {
    case []interface{}:
        for i := 0; i < len(v); i++ {
            switch v := v[i].(type) {
            case string:
                fmt.Println("\tstring in a slice", v)
            case float64: //numbers in json are float64 by default
                fmt.Println("\tnumber in a slice", v)
            default:
                fmt.Printf("\tunknown type (%T)", v, v)
            }
        }
    case string:
        fmt.Println("\tstring", v)
    }
}

操場

你應該使用json.NewDecoder到JSON轉換成切片地圖和json.NewEncoder到地圖的片轉換成JSON。

我在這里寫的http://play.golang.org/p/jbXYGC5pp2

請參閱評論中的說明。

我希望這個幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM