如何检查变量包含JSON对象或字符串?

时间:2016-08-01 15:37:51

标签: javascript jquery json

是否可以检查变量中的数据是字符串还是JSON对象?

var json_string = '{ "key": 1, "key2": "2" }';

var json_string = { "key": 1, "key2": "2" };

var json_string = "{ 'key': 1, 'key2', 2 }";

当json_string.key2返回2或未定义时。

何时需要使用JSON.parse?

我如何检查哪一个是字符串或JSON对象。

4 个答案:

答案 0 :(得分:2)

试试这个:

if(typeof json_string == "string"){
   json = JSON.parse(json_string);
}

答案 1 :(得分:2)

因为您的第3个json_string无效,您还必须检查错误:

function checkJSON(json) {
 if (typeof json == 'object')
   return 'object';
 try {
   return (typeof JSON.parse(json));
 }
 catch(e) {
   return 'string';
 }
}

var json_string = '{ "key": 1, "key2": "2" }';
console.log(checkJSON(json_string));    //object

json_string = { "key": 1, "key2": "2" };
console.log(checkJSON(json_string));    //object

json_string = "{ 'key': 1, 'key2', 2 }";
console.log(checkJSON(json_string));    //string

答案 2 :(得分:0)

实际上并不是'JSON对象'。一旦JSON字符串被成功解码,它就会变成一个对象,一个数组或一个原语(字符串,数字等)。

但是,您可能想知道字符串是否是有效的JSON字符串:

var string1 = '{ "key": 1, "key2": "2" }';
var string2 = 'Hello World!';
var object = { "key": 1, "key2": "2" };
var number = 123;

function test(data) {
  switch(typeof data) {
    case 'string':
      try {
        JSON.parse(data);
      } catch (e) {
        return "This is a string";
      }
      return "This is a JSON string";

    case 'object':
      return "This is an object";
      
    default:
      return "This is something else";
  }
}

console.log(test(string1));
console.log(test(string2));
console.log(test(object));
console.log(test(number));

答案 3 :(得分:0)

要检查变量类型,可以使用typeof运算符

要转换有效的字符串化json对象,可以使用以下函数

如果变量是对象,则它不会执行任何操作并返回相同的对象。

但如果它是一个字符串,那么它会尝试将其转换为object并返回。



  function getJSON(d) {
    var jsonObject;
    jsonObject = d;
    if (typeof d === 'string') {
      try {
        jsonObject = JSON.parse(d);
      } catch (Ex) {
        jsonObject = undefined;
        console.log("d " ,d, 'Error in parsing', Ex);
      }
    }
    return jsonObject;
  };
  var obj = {a:2, b:3};
  var stringified_obj = JSON.stringify(obj);
  console.log(obj);
  console.log(getJSON(stringified_obj));