我有一个简单的AJAX调用,服务器将返回一个带有有用数据的JSON字符串或一个由PHP函数mysql_error()产生的错误消息字符串。如何测试该数据是JSON字符串还是错误消息。

使用一个名为isJSON的函数会很好,就像你可以使用instanceof函数来测试某个东西是否是数组一样。

这就是我想要的:

if (isJSON(data)){
    //do some data stuff
}else{
    //report the error
    alert(data);
}

当前回答

对我来说,我只是通过2个正返回条件,

第一个条件-检查两端是否为“{”和“}”

第二个条件-检查JSON是否可解析

我是这样做的

const isJsonStringified = (value) => {
  try {
    const isObject = value.slice(0, 1) === '{' && value.slice(value.length - 1) === '}';
    if (typeof value === 'string' && isObject) {
      JSON.parse(value);
    } else {
      return false;
    }
  } catch (err) {
    return false;
  }
  return true;
};

欢迎:)

其他回答

使用JSON.parse

function isJson(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}

当使用jQuery $.ajax()响应将有responseJSON属性,如果响应是JSON,这可以像这样测试:

if (xhr.hasOwnProperty('responseJSON')) {}

如果服务器响应的是JSON,那么它会有一个application/ JSON内容类型,如果它响应的是纯文本消息,那么它应该有一个文本/纯内容类型。确保服务器响应正确的内容类型并进行测试。

对我来说,我只是通过2个正返回条件,

第一个条件-检查两端是否为“{”和“}”

第二个条件-检查JSON是否可解析

我是这样做的

const isJsonStringified = (value) => {
  try {
    const isObject = value.slice(0, 1) === '{' && value.slice(value.length - 1) === '}';
    if (typeof value === 'string' && isObject) {
      JSON.parse(value);
    } else {
      return false;
    }
  } catch (err) {
    return false;
  }
  return true;
};

欢迎:)

导出函数isJsonString(value) { 尝试{ return typeof JSON.parse(value) === 'object'; } catch (e) { 返回错误; } }

这为我处理了大部分所需的情况!