SON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构
1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具有以下这些形式
1、对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
2、数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。值(value)可以是双引号括起来的字符串(string)、数值(number)、true
、false
、 null
、对象(object)或者数组(array)。这些结构可以嵌套。
例1:
{"cmd":"10002","roleEquipId":2,"level":3} %% Json 第一种形式
rfc4627:decode = {ok,{obj,List},[]}
List = [{"cmd","10002"},{"roleEquipId",2},{"level",3}] %% 第二种形式
例2:
A = [{obj,
[{"toPosition",<<"1:5:0">>},
{"fromPosition",<<"1:4:0">>}]
}],
rfc4627:encode(A).
结果为:"[{\"toPosition\":\"1:5:0\",\"fromPosition\":\"1:4:0\"}]" 这种格式的List当存进数据库时,不用显示转化为bitstring,当它存进数据库时,会直接转化为<<"[{\"toPosition\":\"1:5:0\",\"fromPosition\":\"1:4:0\"}]" >>格式
例3:
B = {obj,
[{"toPosition",<<"1:5:0">>},
{"fromPosition",<<"1:4:0">>}]
},
rfc4627:encode(B).
结果为:"{\"toPosition\":\"1:5:0\",\"fromPosition\":\"1:4:0\"}" 而这种格式的List就不可以了。
例4:
A={obj,
[{material,[2000]},{targetLevel,12},{needPower,52},{planetId,1}]
},
rfc4627:encode(A).
结果为:"{\"material\":[2000],\"targetLevel\":12,\"needPower\":52,\"planetId\":1}" 无论material、targeLevel、needPower是原子还是字符串,在转化为Json时都会自动转化为字符串格式,但最好不要用原子的格式,因为程序对于原子的个数是由限制的,并且很容易会成为黑客攻击的目标。
例5:
A="{\"ID\":null,\"name\":\"Doe\"}", ( 注意:这里的格式一定是" ",A里面的 " 要进行转义)
rfc4627:decode(A).
结果为:{ok,{obj,[{"ID",null},{"name",<<"Doe">>}]},[]}
例6:
A="[{\"ID\":null,\"name\":\"Doe\"}]",
rfc4627:decode(A).
结果为:{ok,[{obj,[{"ID",null},{"name",<<"Doe">>}]}],[]}