5

GoでJSONからキー値を取得したいのですが、方法がわかりません。

simplejson を使用して json 値を読み取ることができましたが、キー値を取得する方法を見つけることができませんでした。

誰かが私を正しい方向に向けたり、助けたりすることができますか?

ありがとうございました!

4

4 に答える 4

18

次のようにして、JSON 構造のトップレベルのキーを取得できます。

package main

import (
    "encoding/json"
    "fmt"
)

// your JSON structure as a byte slice
var j = []byte(`{"foo":1,"bar":2,"baz":[3,4]}`)

func main() {

    // a map container to decode the JSON structure into
    c := make(map[string]json.RawMessage)

    // unmarschal JSON
    e := json.Unmarshal(j, &c)

    // panic on error
    if e != nil {
        panic(e)
    }

    // a string slice to hold the keys
    k := make([]string, len(c))

    // iteration counter
    i := 0

    // copy c's keys into k
    for s, _ := range c {
        k[i] = s
        i++
    }

    // output result to STDOUT
    fmt.Printf("%#v\n", k)

}

キーの順序は、JSON 構造内の順序と一致してはならないことに注意してください。最終スライスでの順序は、まったく同じコードの実行ごとに異なります。これは、マップの反復がどのように機能するかによるものです。

于 2013-07-03T16:17:11.240 に答える
11

何十もの役に立たない構造体を書きたくない場合は、 https://github.com/tidwall/gjsonのようなものを使用できます。

gjson.Get(
  `{"object": {"collection": [{"items": ["hello"]}]}}`,
  "object.collection.items.0",
) // -> "hello"

さらに、いくつかの奇妙な便利なクエリのトリック.

于 2016-05-19T20:02:49.230 に答える