そろそろJSONの扱い方に慣れておこう...その1

## JSON（JavaScript Object Notation）とは
軽量なデータ記述言語の1つである。構文はJavaScriptにおけるオブジェクトの表記法をベースとしているが、JSONはJavaScript専用のデータ形式では決してなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しに使えるよう設計されている。[参照1]:https://ja.wikipedia.org/wiki/JavaScript_Object_Notation

もともとはjavascriptにおける表現記法だったみたいですが、今ではいろいろなところで見かけますね('ω')

## JSONの書き方
詳しい内容については後日補足するかもしれませんが、今は省略いたします。以下のようにデータを表現を扱うみたいです...(*‘∀‘)  　[参照2]:https://qiita.com/chihiro/items/dd1912c1406dbfe16b72  

```json
{
  "character" : {
    "name": "Taro",
    "url":https://www.ccc.bbb.aaa.jp
  }
}
```

もう少し細かく書いてみると以下のようになるみたいです...

```json
{
 "kasumi_toyama": {
    "url": "http://bangdream.gamedbs.jp/chara/show/11/"
  },
  "tae_hanazono": {
    "url": "http://bangdream.gamedbs.jp/chara/show/10/"
  },
  "rimi_ushigome": {
    "url": "http://bangdream.gamedbs.jp/chara/show/25/"
  }
}
```

## PythonでJSONファイルを読み込む
上記で書いたjsonファイルを試しにPython(Python3)で読み込んでみましょう(*'ω'*)

### JSONファイルを用意
![127.0.0.1_8888_edit_test_test.json.png](https://qiita-image-store.s3.amazonaws.com/0/331462/37345639-b2d7-2a97-436d-ef3b6f17dd05.png)

### サンプルコード
```py
import json

def main():
    f = open("test.json", 'r')

    json_data = json.load(f)  #JSON形式で読み込む
    print(json_data)
    
    for name in json_data.keys():
        print(json_data[name]["url"])

if __name__=='__main__':
    main()
```

### 実行結果
うまくいきましたね(*'ω'*) jsonファイルを読み込んだ上で必要な要素にアクセスできました(*‘∀‘)
![127.0.0.1_8888_notebooks_test_json_load_test.ipynb.png](https://qiita-image-store.s3.amazonaws.com/0/331462/959dcd66-6893-d145-65bf-b9c4a08fb7ee.png)

## GoでJSONファイルを読み込む
上記で書いたjsonファイルを試しにGoで読み込んでみましょう(*'ω'*)（後日、追記したので実行結果の出力が増えています）

### サンプルコード
```go
package main

import (
	"fmt"
	"io/ioutil"
	"log"

	simplejson "github.com/bitly/go-simplejson"
)

func main() {
	//jsonファイルの読み込み
	bytes, err := ioutil.ReadFile("./json/test.json")
	if err != nil {
		log.Fatal(err)
	}

	// []byte型からjson型へ変換
	json, err := simplejson.NewJson(bytes)

	//fmt.Println(json)

	for i, _ := range json.MustMap() {
		fmt.Printf("name: %s\n", i)
		fmt.Printf("url: %s\n", json.Get(i).Get("url").MustString())
	}
}
```

### 実行結果
色々なソースを参考にしながら試行錯誤していましたが、Goでもうまく読み込めました(*'ω'*)
 
```
# go run go-simplejson-test.go
name: yukina_minato
url: http://bangdream.gamedbs.jp/chara/show/15/
name: rinko_shirogane
url: http://bangdream.gamedbs.jp/chara/show/13/
name: saaya_yamabuki
url: http://bangdream.gamedbs.jp/chara/show/24/
name: ran_mitake
url: http://bangdream.gamedbs.jp/chara/show/22/
name: moka_aoba
url: http://bangdream.gamedbs.jp/chara/show/9/
name: tomoe_udagawa
url: http://bangdream.gamedbs.jp/chara/show/8/
name: kokoro_tsurumaki
url: http://bangdream.gamedbs.jp/chara/show/7/
name: seta_kaoru
url: http://bangdream.gamedbs.jp/chara/show/19/
name: kasumi_toyama
url: http://bangdream.gamedbs.jp/chara/show/11/
name: tae_hanazono
url: http://bangdream.gamedbs.jp/chara/show/10/
name: arisa_ichigaya
url: http://bangdream.gamedbs.jp/chara/show/23/
name: kanon_matsubara
url: http://bangdream.gamedbs.jp/chara/show/18/
name: hina_hikawa
url: http://bangdream.gamedbs.jp/chara/show/17/
name: chisato_shirasagi
url: http://bangdream.gamedbs.jp/chara/show/4/
name: maya_yamato
url: http://bangdream.gamedbs.jp/chara/show/16/
name: eve_wakamiya
url: http://bangdream.gamedbs.jp/chara/show/3/
name: rimi_ushigome
url: http://bangdream.gamedbs.jp/chara/show/25/
name: himari_uehara
url: http://bangdream.gamedbs.jp/chara/show/21/
name: tsugumi_hazawa
url: http://bangdream.gamedbs.jp/chara/show/20/
name: hagumi_kitazawa
url: http://bangdream.gamedbs.jp/chara/show/6/
name: misaki_okuzawa
url: http://bangdream.gamedbs.jp/chara/show/12/
name: aya_maruyama
url: http://bangdream.gamedbs.jp/chara/show/5/
name: sayo_hikawa
url: http://bangdream.gamedbs.jp/chara/show/2/
name: risa_imai
url: http://bangdream.gamedbs.jp/chara/show/14/
name: ako_udagawa
url: http://bangdream.gamedbs.jp/chara/show/1/
#
```