18

JSON.Stringify関数によってオブジェクトから変換されたjson文字列があります。

それがjson文字列なのか、通常の文字列なのか知りたいです。

jsonかどうかを確認する「isJson()」のような関数はありますか?

以下のコードのようにローカルストレージを利用する際に利用したい機能です。

前もって感謝します!!

var Storage = function(){}

Storage.prototype = {

  setStorage: function(key, data){

    if(typeof data == 'object'){

      data = JSON.stringify(data);
      localStorage.setItem(key, data);     

    } else {
      localStorage.setItem(key, data);
    }

  },


  getStorage: function(key){

    var data = localStorage.getItem(key);

    if(isJson(data){ // is there any function to check if the argument is json or string?

      data = JSON.parse(data);
      return data;

    } else {

      return data;
    }

  }

}

var storage = new Storage();

storage.setStorage('test', {x:'x', y:'y'});

console.log(storage.getStorage('test'));
4

5 に答える 5

32

「簡単な」方法はtry、失敗時に解析されていない文字列を解析して返すことです。

var data = localStorage[key];
try {return JSON.parse(data);}
catch(e) {return data;}
于 2013-09-11T15:37:33.887 に答える
14

を使って簡単に作ることができますJSON.parse。有効でない JSON 文字列を受け取ると、例外がスローされます。

function isJSON(data) {
   var ret = true;
   try {
      JSON.parse(data);
   }catch(e) {
      ret = false;
   }
   return ret;
}
于 2013-09-11T15:36:38.273 に答える
6

別の投稿でこれを見つけました オブジェクトが JavaScript の JSON であるかどうかをどのように知ることができますか?

function isJSON(data) {
    var isJson = false
    try {
        // this works with JSON string and JSON object, not sure about others
       var json = $.parseJSON(data);
       isJson = typeof json === 'object' ;
    } catch (ex) {
        console.error('data is not JSON');
    }
    return isJson;
}
于 2013-09-11T15:37:56.730 に答える