JQueryでJSONの変換 ($.json decode()、$.json encode())

提供:wiki - PCスキルの小技・忘却防止メモ
移動: 案内, 検索

ソース

(function($) {
  $.extend({
    isArray: function isArray(obj){
      // オブジェクトが配列か調べる。
      return !(
        !obj ||
        (!obj.length || obj.length == 0) ||
        typeof obj !== 'object' ||
        !obj.constructor ||
        obj.nodeType ||
        obj.item
      );
    },
    
    json_decode: function json_decode(obj) {
      // オブジェクト、配列→JSON文字列
      var t = typeof (obj);
      if (t != "object" || obj === null) {
        // simple data type
        if (t == "string") {
          obj = '"' + obj + '"';
        }
        return String(obj);
      }
      else {
        var n, v, json = [];
        var arr = (obj && $.isArray(obj));
        
        for (n in obj) {
          v = obj[n];
          t = typeof(v);
          if (obj.hasOwnProperty(n)) {
            if (t == "string") {
              v = '"' + v + '"';
            }
            else if (t == "object" && v !== null) {
              v = jQuery.json_decode(v);
            }
            json.push((arr ? "" : '"' + n + '":') + String(v));
          }
        }
        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
      }
    },
    
    json_encode: function json_decode(str, errVal) {
      // JSON文字列→オブジェクト、配列
      //  - エラー時は「errVal」を使う。
      
      if ( errVal == null ){
        errVal = false;
      }
      
      try {
        // JSONに変換
        var obj = $.parseJSON(jsonStr);
      }
      catch (e) {
        // parseJSON()でエラーのとき
        
        if ( errVal == 'obj' ) {
          errVal = {};
        }
        else if ( errVal == 'ary' ) {
          errVal = [];
        }
        
        return errVal;
      }
      
      return obj;
    }
    
  });
})(jQuery);

※「$.isArray()」は「$.json_decode()」で使うヤツ。

使い方

▼オブジェクト、配列→JSON文字列:$.json_decode()

var obj = {○○○○};

// オブジェクト、配列→JSON文字列
var jsonStr = $.json_decode(obj);

▼JSON文字列→オブジェクト、配列:$.json_encode()

var str = '○○○○';

// JSON文字列→オブジェクト、配列
var jsonObj = $.json_encode(str, 'obj');

関連項目