JSON技术,看这一篇就够了

JSON,几乎每个软件开发者都接触使用过,但大都只会使用而已,究竟JSON是什么,怎么来的,有哪些应用,可能是一知半解,今天我们就罗列几个JSON重要的知识点。

JSON定义

JavaScript对象表示法/标记(JavaScript Object Notation), 是一种轻量级的数据交换格式。

JSON 语法是 JavaScript 对象表示法语法的子集。是基于javascript的对象字面量(因为JSON里面没有类似JavaScript对象方法/函数。字面量:指字面意思和要表达的意思是完全一致的值)。

JSON是一项技术标准,采用完全独立于程序语言的文本格式。JavaScript对象表示法,去掉“JavaScript”,就是对象表示法,所以忘掉“JavaScript”吧,我们使用的是一种基于对象表示法的数据交换格式,这使JSON成为理想的数据交换语言。

JSON数据文件的扩展名为.json。其实只要数据格式符合JSON规范,不一样要*.json的文件,文本格式皆可。

JSON的数据格式/类型

JSON 采用"名称 / 值对"的数据格式(A collection of name/value pairs)。不同的编程语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列表(An ordered list of values)。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)。

这些都是常见的数据结构。目前,绝大部分编程语言都以某种形式支持它们。这使得在各种编程语言之间交换同样格式的数据成为可能。

JSON的数据结构有如下6种:

  • number:和JavaScript的number完全一致;
  • boolean:就是JavaScript的true或false;(必须为小写)
  • string:就是JavaScript的string;
  • null:就是JavaScript的null;(必须为小写)
  • array:就是JavaScript的Array表示方式——[];
  • object:就是JavaScript的{ ... }表示方式。

如何在JavaScript中使用JSON

由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准。而且几乎所有编程语言都有解析JSON的库。JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。下面就以JavaScript为例,看下如何使用JSON。其他语言则需要安装扩展,这里不再举例。

  • 把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。
  • 如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。

JSON.parse是将json格式的字符串转换成json对象。

var str ='{"name":"张三","age":16,"msg":["a","b"]}';
var json = JSON.parse(str);
console.log("name:" + json.name);
console.log("msgLen:" + json.msg.length);
#输出
name:张三
msgLen:2

JSON.stringify将json对象转换成json格式的字符串。

var json = {"name":"张三","age":16,"msg":["a","b"]};
var str = JSON.stringify(json);
console.log("json:" + str);
console.log("jsonLen:" + str.length);
#输出
json:{"name":"张三","age":16,"msg":["a","b"]}
jsonLen:38

注意下面一种情况

var user = {
 name : "test",
 'age' : 'test'
};

这是对象,不是json。

JSON 转义

需要转义的字符

  • "
  • \
  • /(正斜线)
  • \b(退格符)
  • \f(换页符)
  • \t(制表符)
  • \n(换行符)
  • \r(回车符)
  • \u(后面跟着十六进制符号,如笑脸\u263A)

例如下面的双引号,前面必须加"\"

{
  "title": "A \"book\""
}

JSON schema

JSON Schema 是一个允许你标注和验证JSON文档工具,其遵循Json规范,本身就是一个Json字符串,可以做API自动测试和验证客户端提交的数据。

详细说明可以浏览官网:http://json-schema.org/

这里以PHP为例,演示一下具体使用(项目来源地址:https://github.com/justinrainbow/json-schema

data.json

{
  "name":"jack",
  "age":1000,
  "height":1
}

schema.json

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "format": "regex",
      "pattern": "[a-z]+"
    },
    "age": {
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "maximum": 100
    },
    "height": {
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "maximum": 2
    }
  }
}

index.php

check($data, (object) array('$ref' => 'file://' . realpath('schema.json')));

if ($validator->isValid()) {
    echo "The supplied JSON validates against the schema.\n";
} else {
    echo "JSON does not validate. Violations:
"; foreach ($validator->getErrors() as $error) { echo sprintf("[%s] %s\n", $error['property'], $error['message']) . '
'; } } ?>

输出(这里age验证不通过)
JSON does not validate. Violations:
[age] Must have a maximum value of 100

最后贴几个好用的在线工具网站

在线语法验证解析
https://jsoneditoronline.org/
https://jsonlint.com
https://jsonformatter.curiousconcept.com/

JSON schema 在线验证
https://www.jsonschema.net/(可以自动生成JSON schema)
https://jsonschemalint.com/
https://www.jsonschemavalidator.net/

JSON在线搜索
http://jsonpath.com/
https://jqplay.org/

将JSON转换为HTML
http://tryhandlebarsjs.com/

你可能感兴趣的:(JSON技术,看这一篇就够了)