在计算机科学中,名值对,也可以称为键值对或属性值对,是一种基本的数据表示在计算系统和应用程序中。设计人员通常希望开放式的数据结构,可以在未修改现有的代码或数据的情况下进行未来扩展。在这种情况下,
数据模型的全部或部分可以表示为
元组的
集合< name,value >;每个元素都是名值对,根据特定应用程序和程序员选择的实现。
简介
在计算机科学中,名值对,也可以称为键值对或属性值对,是一种基本的数据表示在计算系统和应用程序中。设计人员通常希望开放式的数据结构,可以在未修改现有的代码或数据的情况下进行未来扩展。在这种情况下,数据模型的全部或部分可以表示为元组的
集合< name,value >;每个元素都是名值对,根据特定应用程序和程序员选择的实现。一些常见的应用有电子邮件、在网址中查询字符串、一些数据库系统 - 键值数据、Windows注册表和OpenStreetMap映射数据。一些计算机语言把名值对作为标准语言特征来实现名值对,或更频繁的名值对集合。
数据模型
数据模型(Data Model)是数据特征的抽象,是数据库管理的教学形式框架。数据库系统中用以提供信息表示和操作手段的形式构架。数据模型包括数据库数据的结构部分、数据库数据的操作部分和数据库数据的约束条件。数据(Data)是描述事物的符号记录。模型(Model)是现实世界的抽象。
数据模型所描述的内容包括三个部分:数据结构、数据操作、数据约束。
1)
数据结构:数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都基本建立在数据结构上。不同的数据结构具有不同的操作和约束。
2)数据操作:数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式。
3)数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。
元组与集合
元组是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为记录。
在离散数学中,集合是对象的一个无序的聚集,对象也称为集合的元素或成员,集合包含它的元素。我们用来表示a是集合A中的一个元素。而记号a∉A 表示a不是集合A中的一个元素。
名值对存储
名值对存储是数据库最简单的组织形式。基本上所有的编程语言都带有应用在内存中的键值对存储。C++STL的映射容器(map container)和Java的HashMap以及Python的字典类型都是名值对存储。名值对存储通常都有如下接口:
Get( key ): 获取之前存储于某标示符“key”之下的一些数据,或者“key”下没有数据时报错。
Set( key, value ): 将“value”存储到存储空间中某标示符“key”下,使得我们可以通过调用相同的“key”来访问它。如果“key”下已经有了一些数据,旧的数据将被替换。
Delete( key ): 删除存储在“key”下的数据。
大部分低层实现都是使用哈希表或者某种自平衡树(例如B-树或者红黑树)。有时候数据太大而不装不进内存,或者必须维持数据谨防系统因为未知原因而崩溃。在这些情况下,就必须使用到文件系统。
名值对存储是NoSQL运动的一部分,NoSQL将所有不使用基于
关系型数据库概念的数据库系统组合在一起。
维基百科上的NoSQL词条很好的总结了这些数据库的特征。
不使用SQL查询语言。
可不全面支持ACID(原子性、一致性、隔离性、持久性)。
可提供分布式、容错强的结构。
Json的名值对及示例
数据类型,从结构上看,所有的数据最终都可以分成三种类型:
第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。
第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。
Json格式规则:(DouglasCrockford提出的)
1) 并列的数据之间用逗号(“,”)分隔。
2) 映射用冒号(“:”)表示。
4) 映射的集合(对象)用大括号(“{}”)表示。
“北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。”
写成json格式就是这样:
[
{
},
{
}
]
如果事先知道数据的结构,上面的写法还可以进一步简化:
[
[
16800,
1600
],
[
6400,
1800
]
]
验证JSON数据格式是否正确,http://www.jsonlint.com/ 这个在线编辑器可以验证
访问数据元素
var myObject = { 'color' : 'blue' };
myObject.color;或者myObject[“color”]两种方式,
} // End Employees
访问数据元素:employees.sales[0].firstName,代表sales数组中第一个firstName元素Sally
employees.sales[1].firstName,代表sales数组中第二个firstName元素Jim。