前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

Jsonレスポンスのキー名を小文字にしたい。

課題

JSONAPIサーバーを作成中である。構造体を外部アクセスさせるためには大文字で変数を定義する必要があるが、そうするとJsonにMarchalした際に大文字になってしまう。返す際にKey名を小文字で返すにはどうすれば良いか

{
"Id": 1,
"Name": "Taro"
"Job": "Writer"
}

対策

json:で別名を定義する

type Item struct {
	Id   int `json:"id"`
	Name string `json:"name"`
	Job string `json:"職業"`
}

こうなる

{
"id": 1,
"name": "Taro",
"職業": "Writer"
}

別名なので、小文字だけでなく任意に設定が可能。

package main

import (
	"fmt"
	"encoding/json"
	"net/http"
)


type Item struct {
	Id   int `json:"id"`
	Name string `json:"fuga"`
	Job string `json:"職業"`
}

func main() {
	fmt.Println("Strart Server")
	http.HandleFunc("/", ShowIndex)
	http.ListenAndServe(":8080", nil)
}


func ShowIndex(w http.ResponseWriter, r *http.Request) {
	item := Item{Id:1, Name: "Taro", Job: "Writer"}
	text, err := json.Marshal(item)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
	}
	w.Header().Set("Content-Type", "application/json")
	w.Write(text)
}