image-20210326001803447

Json学习笔记

什么是JSON

首先我们可以很容易找到JSON的官方定义:JavaScript Object Notation (JavaScript对象表示语法)

既然提到了语法,这也就表明JSON不是一种语言,而是一种规范,类似 XML。

它还具有几个特点:

  • JSON是轻量级的文本数据交换格式
  • JSON独立于语言
  • JSON具有自我描述性,容易理解
JSON和XML的异同

类似之处:

  • JSON 是纯文本
  • JSON 具有“自我描述性”(可读性)
  • JSON 具有层级结构(值中有值)

不同之处:

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 使用数组
  • 没有保留字

JSON的信息表示方式

JSON支持这些数据类型:

  • 键值对:{"key": value}
  • 数组:[1, 2, 3]
  • 字符串:"abc"
  • 数值(整数和浮点数):12.34
  • 布尔值:truefalse
  • 空值:null

实际上,因为JSON为JS而生的特点,它要表示的数据要么是对象,要么就是数据,所以用中括号来表示数组,大括号来表示对象:

JSON数组:
var people = [
{"name":"Kevin", "age":13},
{"name":"Bob", "age":14}
];
JSON对象:
var obj = {
age:10,
str:"abc",
method:function(){
alert("GOOD");
}
};

当然,数组和对象也是可以互相包含的,这里举例的是比较简单的例子。

什么是JSON-RPC

前面大致了解了一下JSON的概念,所以我们先看看RPC是什么:

RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。

通俗的讲,RPC就是远程的调用特定的方法(函数),通过网络通信的方式来使用本地没有的方法。

然而,这种调用不是像在本地一样使用特定的编程语言下的规范就能实现的。而且云端的方法可能使用了和本地不同的语言编写,大量设备直接用自身的语言去调用显然并不现实。

于是,JSON-RPC,作为远程调用的协议规范出世了。

从名字很容易看出,它使用了JSON作为传输内容的方式,JSON-RPC直接在内容中定义了要调用的函数名称(比如{“method”: “getName”}),这种统一的标准可以适应任何一种语言,也得益于JSON轻量化的特点,传输效率高。

JSON-RPC的具体规范(以2.0为例)
JSON-RPC请求:

一个JSON-RPC的请求必须包含以下4个字段:

  • jsonrpc: 指定JSON-RPC的版本,如2.0
  • id: 调用标识符,用于标示一次远程调用过程,值必须包含一个字符串、数值。
  • method: 所要调用方法名称
  • params: 方法传入的参数,若无参数则传入空[]
JSON-RPC响应:
  • jsonrpc:指定JSON-RPC版本
  • id:调用标识符,用于标识一次远程调用过程,值必须包含一个字符串、数值。
  • result:调用成功显示的响应结果
  • error: 如果调用失败则显示错误的信息,error带有以下几个字段:
    • code:错误类型,整数表示
    • message:错误的描述字
    • data:错误附加信息的基本类型或者结构化类型
JSON-RPC错误码:

-32700: Parse error 语法解析错误

-32600: Invalid Request 无效的方法对象

-32601: Method not found 方法不存在

-32602: Invalid params 方法参数无效

-32603: Internal error 内部错误

JSON-RPC示例:
发出--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
收到<-- {"jsonrpc": "2.0", "result": 19, "id": 1}