【问题标题】:How to check a variable contains JSON object or string?如何检查变量是否包含 JSON 对象或字符串?
【发布时间】:2016-12-06 18:29:33
【问题描述】:

是否可以检查变量中的数据是字符串还是 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 对象。

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

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

为了转换一个有效的字符串化 json 对象,你可以使用下面的函数

如果变量是对象,那么它什么也不做,返回相同的对象。

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

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

【讨论】:

    【解决方案2】:

    实际上并没有“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】:

      因为您的第三个 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
      

      【讨论】:

        【解决方案4】:

        试试这个:

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

        【讨论】:

        • 它只会检查它的字符串,但它不会检查 JSON。
        • 那就是typeof json_string == "object"
        猜你喜欢
        • 2019-06-27
        • 2018-06-14
        • 2016-10-03
        • 2013-07-01
        • 2014-01-07
        • 2011-02-06
        • 2018-04-23
        • 2018-05-06
        • 2020-07-27
        相关资源
        最近更新 更多