Chapter 19. Working with Structured Data
2010/11/05(金) 22:30 Javascript親記事へこのエントリーをはてなブックマークに追加

19.0 Introduction

従来のAjaxで受け取った文字列などのデータはホント挿入するまで安全なのかははかり知ることができないというセキュリティ的な弱点があった。
そこでJSONが登場。ECMA5ではJSON.parseはネイティブ実装されているので高速に動作し、evalと違って安全にJSONオブジェクトを解釈できる。

19.1  Process an XML Document Returned from an Ajax Call

Ajaxの返り値としてXMLを扱うには、MIME typeにxmlを設定してresponseXMLで取得する。
if (window.XMLHttpRequest) {
   xmlHttpObj = new XMLHttpRequest();
   if (xmlHttpObj.overrideMimeType) {
       xmlHttpObj.overrideMimeType('text/xml');
   }
}
ただし、IEではoverrideMimeTypeメソッドをサポートしてないので、text/xml、つまりresponseTextで返り値を取得してそれをDOMparserでパースする方法がる。
if (window.DOMParser) {
   parser=new DOMParser();
   xmlResult = parser.parserFromString(xmlHttpObj.responseText,
   "text/xml");
} else {
   xmlResult = new ActiveXObject("Microsoft.XMLDOM");
   xmlResult.async = "false"
   xmlResult.loadXML(xmlHttpObj.responseText);

19.3  Generate a JavaScript Object with JSON, Old-School Style

昔のJSONオブジェクト解凍方法
1つは()で囲んで実行したものを変数へ
var obj = eval ("(" + objJSON + ")");
もう一つはeval("obj=" + objJSON); みたいに変数に代入する式をeval。
ただ、今はjsonパーサーがあるのでそちらを使いましょう

19.4 Parse a JSON Formatted String

JSONを扱うのにJSON.parseを使うが、第二引数にreplacer functionを設定する事で出力の形を変えられる。
valueが0か1だったらそれぞれを真偽値に変更する。
var jsonobj = '{"test" : "value1", "test2" : 3.44, "test3" : 0}';
var obj = JSON.parse(jsonobj, function (key, value) {
   if (typeof value == 'number') {
      if (value == 0)
         value = false;
      else if (value == 1) {
         value = true;
      }
    }
    return value;
    });
 alert(obj.test3); // prints false
同じようにJSON.stringifyにも第二引数にreplacer functionを設定できますが、バグってるバージョンもあるので気をつける。
続・先取り! Google Chrome Extensions:第8回 Google Chrome拡張とHTML5 #2|gihyo.jp … 技術評論社
第3引数ではspaceの設定ができます。数字を入れるとスペースの数が変わり、文字列ならスペースの代わりに文字列が入る。
var whitelist = ["test","test2"];
var obj = {"test" : "value1", "test2" : 3.44, "test3" : false};
var jsonobj = JSON.stringify(obj, whitelist, 3);
// =>the result is:
{
   "test": "value1",
   "test2": 3.44
}

var jsonobj = JSON.stringify(obj, whitelist, "***");
// =>the result is:
{
 ***"test": "value1",
 ***"test2": 3.44
}

19.6  Convert hCalendar Microformat Annotations into a Canvas Timeline

MetaDataの hCalendar Microformatについて。

19.7  Glean Page RDFa and Convert It into JSON Using rdfQuery and the jQuery RDF Plug-in

Resource Description Framework (RDF) について。
リソースの位置組みのメタデータ
以下のようなライブラリがある。

名前:  非公開コメント   

  • TB-URL  http://efcl.info/adiary/082/tb/