@Konboi memo

主に技術に関してつらつらと。

Golangでinterfaceなsliceの長さを調べる

日本語の使い方的にどうなのっていうのはあるがそこは置いく。 コードを見てもらったほうが早いと思うので。

こちらになります。

package main

import (
    "encoding/json"
    "fmt"
    "reflect"
    "strings"

    "github.com/mattn/go-jsonpointer"
)

func main() {
    var i interface{}
    jsonData := `{"fuga": "hoge", "ary": [{"hoge":"piyo"},{"poo": "boo"},{"foo":"bar"}]}`
    decoder := json.NewDecoder(strings.NewReader(jsonData))
    decoder.Decode(&i)
    fmt.Printf("%v \n", i)
        // map[fuga:hoge ary:[map[hoge:piyo] map[poo:boo] map[foo:bar]]]
    fmt.Printf("%T \n", i)
        // map[string]interface {}
    ary, _ := jsonpointer.Get(i, “/ary”)
    r := reflect.ValueOf(ary)
    fmt.Printf("%v \n", r.Kind())
        // slice
    fmt.Printf("%v \n", r.Len())
        // 3
}

こんな変なjsonオブジェクトが返ってくることはないと思うけど。

reflect 使えば interfaceなsliceの長さがわかる(?)。

基礎からわかる Go言語

基礎からわかる Go言語

WEB+DB PRESS Vol.82

WEB+DB PRESS Vol.82

  • 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/08/23
  • メディア: 大型本
  • この商品を含むブログを見る