JSON形式について

目的

理解できていなかったためまとめてみる

ルール1:APIの応答は、JSON形式で返却されることが一般的

JSON形式(記法)のルール

  • キーとバリュで形成されている→キー・バリュー型(追記190430)
  • 全体が{} で括られる
  • 要素→「"要素名":値」で定義される
  • 配列的要素は、[]で括られる
  • まとまった領域は{}で括られる
{
  "num":2,
  "score":[
  {
    "kokugo": 90,
    "suugaku": 80,
    "eigo": 75,
    "rika": 85,
    "shakai": 80,
  },
  {
    "kokugo": 55,
    "suugaku": 30,
    "eigo": 95,
    "rika": 15,
    "shakai": 75,
  }
 ]
}

ルール2:JSONはプログラム内ではオブジェクトである

let aClass{
  num: 2,
  score: [
    {
      kokugo: 90,
      suugaku: 80,
      eigo: 75,
      rika: 85,
      shakai: 80
    },
    {
      kokugo: 70,
      suugaku: 90,
      eigo: 65,
      rika: 25,
      shakai: 55
    }
  ]
}

// 1人目の国語の成績を取得
// aClass["score"][0].kokugo
// または
// aClass.score[0].kokugo

外部からjsonのデータを取得する場合

ルール3:JSONは「parce」でオブジェクト化、「stringify」でテキスト化して扱える

let req = http.get("http://~", (res) => {
  let chunk = "";
  res.on("data", (c) => {
    chunk = c;
  });
  res.on("end", () => {
    let response = JSON.parse(chunk);
    // 取得したら、parse
    console.log("response: " + JSON.stringify(response));
    // stringifyでテキスト化
    let address = response["results"][0];
    let address1 = address["address1"];
    // parseすると、オブジェクトとして扱える
    agent.add("住所: + address1")
  });
});

// APIの応答
{
  "message": null,
  "results":[
    {
      "address1": "東京都"
      "address2": "千代田区"
      "address3": "千代田"
      "kana1": "トウキョウト"
      "kana2": "チヨダク"
      "kana3": "チヨダ"
      "prefcode": "13"
      "zipcode": "1000001"
    }
  ],
    "status": 200
}

外部からAPIを呼び出すときはJSON.parseを使う→オブジェクト形式に変換する

JSONからもらってきたdataをオブジェクトとして使うことができる

もしテキストの情報として使いたいときは?

JSON.stringifyを使う(ログを出力したいときに便利)

参考URL qiita.com