18

我有一个由 JSON.Stringify 函数从对象转换的 json 字符串。

我想知道它是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'));
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 回答
0

由于问题是“如何检查它是字符串还是 json”,也许一种简单的方法是检查字符串,所以你会在某处做这样的事情:

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

也许这可能就足够了,这取决于您的整体解决方案,以防万一其他人环顾四周。

于 2019-02-27T14:15:54.673 回答
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")andJSON.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 }
    }
}
于 2019-03-16T06:27:35.327 回答