如何检查它是字符串还是json

时间:2013-09-11 15:32:02

标签: javascript jquery json

我有一个json字符串,它是通过JSON.Stringify函数从对象转换而来的。

我想知道它是json字符串还是只是一个常规字符串。

是否有像“isJson()”这样的函数来检查它是否是json?

当我使用本地存储时,我想使用该功能,如下面的代码。

提前谢谢!!

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'));

5 个答案:

答案 0 :(得分:29)

“简单”的方法是try解析并在失败时返回未解析的字符串:

var data = localStorage[key];
try {return JSON.parse(data);}
catch(e) {return data;}

答案 1 :(得分:14)

您可以使用JSON.parse轻松制作一个。当它收到一个无效的JSON字符串时,它会抛出异常。

function isJSON(data) {
   var ret = true;
   try {
      JSON.parse(data);
   }catch(e) {
      ret = false;
   }
   return ret;
}

答案 2 :(得分:5)

在另一篇帖子How do you know if an object is JSON in javascript?

中找到了这个
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;
}

答案 3 :(得分:0)

由于问题是“如何检查它是字符串还是json”,也许一种简单的方法就是检查字符串,因此您将在某处执行以下操作:

    if (typeof data === 'string') { // check for string!
      //... do something
    } else {///... do something else}

根据您的整体解决方案,也许这已经足够了,以防万一有人在四处张望。

答案 4 :(得分:0)

我认为同时返回已解析的JSON是一个好主意,因此我更喜欢以下版本:

function tryParse(str) {
    try {
        return { value: JSON.parse(str), isValid: true }
    } catch (e) {
        return { value: str, isValid: false }
    }
}

您可能知道JSON.parse("1234")JSON.parse("0")JSON.parse("false")JSON.parse("null")不会引发Exception并返回true。所有这些值都是有效的JSON,但是如果您仅想将isValid用作true的对象(例如:{ "key": "value" })和数组(例如:[{ "key": "value" }]),则可以使用以下命令版本:

function tryParse(str) {
    try {
        var parsed = JSON.parse(str);
        return { value: parsed , isValid: typeof parsed === 'object'}
    } catch (e) {
        return { value: str, isValid: false }
    }
}