📜  JSON 验证 - Javascript (1)

📅  最后修改于: 2023-12-03 15:02:26.102000             🧑  作者: Mango

JSON验证 - Javascript

什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是基于JavaScript的语法,但与之无关。JSON以键值对的形式组织数据,并且易于人阅读和编写,同时也易于计算机解析和生成。JSON主要由两种结构组成:对象和数组。

JSON对象

JSON对象是由花括号({})包围,里面包含一个或多个键值对,我们也可以将其称为“哈希表”或“字典”,示例如下:

{
    "name": "John",
    "age": 30,
    "city": "New York"
}
JSON数组

JSON数组是由方括号([])包围,里面包含一个或多个值,这些值可以是字符串、数字、布尔值、null、数组或对象,示例如下:

[
    "apple",
    "banana",
    "orange"
]
为什么要验证JSON?

在使用JSON进行数据交换时,我们经常需要确保传递的数据符合我们预期的格式。JSON验证有助于我们确保JSON数据是有效的、完整的、符合某些特定标准的。

如何验证JSON?

在Javascript中,我们可以使用JSON对象来对数据进行验证。JSON对象提供了两个方法:JSON.parse()JSON.stringify()

JSON.parse()

JSON.parse()方法可以将一个JSON字符串转化为一个Javascript对象,如果JSON字符串不符合规范,则会抛出异常。示例代码如下:

const jsonStr = '{"name":"John","age":30,"city":"New York"}';
try {
  const jsonObj = JSON.parse(jsonStr);
  console.log(jsonObj);
} catch (e) {
  console.error(e);
}

输出结果如下:

{
  "name": "John",
  "age": 30,
  "city": "New York"
}
JSON.stringify()

JSON.stringify()方法可以将一个Javascript对象转化为一个JSON字符串,如果对象中包含了函数、RegExp对象、undefined等类型,则会自动将其转化为null。示例代码如下:

const jsonObj = { name: "John", age: 30, city: "New York" };
const jsonStr = JSON.stringify(jsonObj);
console.log(jsonStr);

输出结果如下:

{"name":"John","age":30,"city":"New York"}
验证JSON格式

当我们要检查一个JSON字符串或Javascript对象是否符合某个格式时,可以使用正则表达式或第三方库(如ajv)进行验证。

使用正则表达式验证

下面是一个示例正则表达式,用于验证一个JSON字符串是否符合我们预期的格式:

const jsonStr = '{"name":"John","age":30,"city":"New York"}';
const pattern = /^[\],:{}\s]*$/
  .test(jsonStr.replace(/\\["\\\/bfnrtu]/g, '@')
  .replace(/["'][^"\\\n\r]*["']|[+-]?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?|true|false|null|undefined|\[.*\]|\{.*\}/g)) ? true : false;
console.log(pattern);

输出结果为true,说明字符串符合预期的格式。

使用第三方库验证

第三方库ajv可以用于验证Javascript对象是否符合我们预期的格式,具体使用方法如下:

import Ajv from "ajv";
const schema = {
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "number" },
    "city": { "type": "string" }
  },
  "required": ["name", "age", "city"]
};
const ajv = new Ajv({ allErrors: true });
const validate = ajv.compile(schema);
const data = { name: "John", age: 30, city: "New York" };
const valid = validate(data);
if (valid) console.log("Valid!");
else console.log(validate.errors);

输出结果为Valid!,说明对象符合预期的格式。

总结

JSON验证是确保JSON数据是有效的、完整的、符合某些特定标准的一种方式。在Javascript中,我们可以使用JSON对象的JSON.parse()JSON.stringify()方法将JSON字符串和Javascript对象相互转换。当我们要检查一个JSON字符串或Javascript对象是否符合某个格式时,可以使用正则表达式或第三方库(如ajv)进行验证。JSON验证在前端开发中是非常常见的任务。