サンプル ⇒ display JSON text data by canvas with jQuery

サンプルの JSON データ (jquery_json.json) :


{
  "foo" : "bar",
  "text" : [
    "hello",
    "こんにちは",
    "good bye",
    "さようなら"
  ]
}

サンプルの HTML + JavaScript ソースコード (jquery_json.html) :


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>display JSON text data by canvas with jQuery</title>
<style type="text/css">
#mycanvas {
  border: solid 3px #000;
}
</style>
<script src="http://www.nilab.info/lib/js/jquery-1.4.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
 
var canvas;
var context;
 
window.onload = function() {
 
  // canvas
  canvas = document.getElementById('mycanvas');
  context = canvas.getContext('2d');
  
  context.fillStyle = "rgb(255, 255, 255)";
  context.fillRect(0, 0, 500, 500);
  
  context.fillStyle = "rgb(255, 0, 0)";
  context.font = 'italic 400 12px/2 Unknown Font, sans-serif';
  context.fillText("hello", 200, 200);
 
  jQuery.ajax({
    url : 'jquery_json.json',
    dataType : 'json',
    //dataType : 'text',
    success : function(data, dataType){
      var json = data;
      //var json = $.parseJSON(data);
      //var json = JSON.parse(data);
      var texts = json['text'];
      alert(texts);
      var fontsize = 14;
      var texts = data.text;
      for(var i=0; i<texts.length; i++){
        context.fillStyle = "rgb(0, 0, 0)";
        context.fillText(texts[i], 100, fontsize * (i+1));
      }
    },
    error : function(xmlHttpRequest, textStatus, errorThrown){
      alert(textStatus);
    }
  });
}
</script>
</head>
<body>
<h1>display JSON text data by canvas with jQuery</h1>
<canvas id="mycanvas" width="500" height="500"></canvas>
</body>
</html>

以下は、すぐに忘れてしまう、大切なこと。

JSON の文字列はシングルクォートで括れない

ダブルクォーテーションでくくりましょう。

文字列は、2重引用符で囲われてバックスラッシュエスケープされたゼロ文字以上のユニコード文字の集まりです。一つの文字も、一つの文字列として表されます。文字列は、CまたはJavaの文字列によく似ています。

JSON

JavaScript のオブジェクトと JSON は別物

オブジェクトはキーと値のペアをコロンで対にして、これらの対をコンマで区切ってゼロ個以上列挙し、全体を中かっこでくくることで表現する。例えば以下のように表現する:

{"name": "John Smith", "age": 33}

ここで注意することはキーとして使うデータ型は文字列に限ることである。したがって、

{name: "John Smith", age: 33}

という表記は許されない。この後者の表記はJavaScriptのオブジェクトの表記法としては正しいが、JSONとしては不正な表記である。

JavaScript Object Notation - Wikipedia

jQuery.getJSON ではエラー時の処理ができない

エラー処理などをしたいときは jQuery.ajax を使いましょう。

jQuery.ajax(options) - jQuery 日本語リファレンス
jQuery.getJSON( url, data, callback ) - jQuery 日本語リファレンス

ちょっと疑問(というかぜんぜんわかんにゃいこと)

dataType : 'json' ではうまく動作するのに、
dataType : 'text' で取得したテキストを jQuery.parseJSON または JSON.parse したんじゃうまくいかなかった。なんでだろー。

tags: javascript json jquery

Posted by NI-Lab. (@nilab)