`
xm_king
  • 浏览: 395386 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Spring技术内幕读书笔...
浏览量:15658
社区版块
存档分类
最新评论

Json 数据类型详解

阅读更多

1.

前几天,我才知道有一种简化的数据交换格式,叫做yaml

我翻了一遍它的文档 ,看懂的地方不多,但是有一句话令我茅塞顿开。

它说,从结构上看,所有的数据最终都可以分成三种类型

第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。

第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。

第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。

我恍然大悟,数据构成的最小单位原来如此简单!难怪在编程语言中,只要有了数组(array)和对象(object)就能够储存一切数据了。

2.

我马上想到了json

21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。这其实需要二步,第一步是将各种数据转化为一个字符串,也就是数据的串行化(serialization),第二步才是交换这个字符串。

当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json。

Json的规格非常简单,只用一个页面、几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。

1) 并列的数据之间用逗号(“,”)分隔。

2) 映射用冒号(“:”)表示。

3) 并列数据的集合(数组)用方括号("[]")表示。

4) 映射的集合(对象)用大括号(“{}”)表示。

上面四条规则,就是Json格式的所有内容。

比如,下面这句话:

“北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。”

写成json格式就是这样:

[
{"城市":"北京","面积":16800,"人口":1600},
{"城市":"上海","面积":6400,"人口":1800}
]

如果事先知道数据的结构,上面的写法还可以进一步简化:

[
["北京",16800,1600],
["上海",6400,1800]
]

由此可以看到,json非常易学易用。所以,在短短几年中,它就取代xml,成为了互联网上最受欢迎的数据交换格式。

我猜想,Douglas Crockford一定事先就知道,数据结构可以简化成三种形式,否则怎么可能将json定义得如此精炼呢!

3.

我还记得,在学习javascript的时候,我一度搞不清楚“数组”(array)和“对象”(object)的根本区别在哪里,两者都可以用来表示数据的集合。

比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢?

我后来才知道,数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。

4.

当然,数组和对象的另一个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。

但是问题是,很多编程语言中,都有一种叫做“关联数组”(associative array)的东西。这种数组中的数据是有名称的。

比如在javascript中,可以这样定义一个对象:

var a={"城市":"北京","面积":16800,"人口":1600};

但是,也可以定义成一个关联数组:

a["城市"]="北京";
a["面积"]=16800;
a["人口"]=1600;

这起初也加剧了我对数组和对象的混淆,后来才明白,在Javascript语言中,关联数组就是对象,对象就是关联数组。这一点与php语言完全不同,在php中,关联数组也是数组。

比如运行下面这段javascript:

var a=[1,2,3,4];

a['foo']='Hello World';

alert(a.length);

最后的结果是4,也就是说,数组a的元素个数是4个。

但是,运行同样内容的php代码就不一样了:

$a=array(1,2,3,4);

$a["foo"]="Hello world";

echo count($a);

最后的结果是5,也就是说,数组a的元素个数是5个。

分享到:
评论

相关推荐

    MySQL操作之JSON数据类型操作详解

    上一篇文章我们介绍了mysql数据存储过程参数实例详解,今天我们看看MySQL操作之JSON数据类型的相关内容。 概述 mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql...

    Json入门教程详解基础

    在 Json 中,String、Number 和 Boolean 类型的数据可以直接表示,例如,String 可以用双引号表示,如 "abc",Number 可以表示为整型或浮点数,如 12345 或 -3.9e10,Boolean 类型可以表示为 true 或 false。Json 还...

    Ajax异步请求JSon数据(图文详解)

    上一篇讲了Ajax请求数据text类型,text和html都是处理比较简答的数据,而在编程过程中使用Ajax调用数据的时候,难免要进行逻辑的处理,接受的数据也变的复杂比如数组类型的数据,这时候就需要使用JSON数据类型进行...

    C#后台返回json类型数据

    在.NET框架下,可以通过多种方式实现数据的序列化与反序列化,从而支持JSON数据的处理。 #### 一、理解题目背景 根据题目描述:“只需要将`dt`传过来就能够生成json类型数据”。这里的`dt`指的应该是一个`...

    SQL Server之JSON 函数详解

    从SQL Server 2016开始,微软引入了对JSON的内置支持,使得数据库系统能够更加灵活地处理JSON数据。本文将详细解析SQL Server中的几个关键JSON函数:ISJSON、JSON_VALUE、JSON_MODIFY和JSON_QUERY。 **1. ISJSON...

    JSON数据构造及解析详解

    在C++中,处理JSON数据通常需要借助第三方库,如cppJson。 在JSON中,数据以键值对(key-value pairs)的形式存储,可以包含对象、数组、字符串、数字、布尔值和null。对象用花括号{}表示,数组用方括号[]表示。...

    JSON Schema 规范(中文版).pdf

    JSON Schema 可以用于定义 JSON 数据结构,验证 JSON 数据,生成文档等。 JSON Schema 的优点 JSON Schema 的优点包括: * 轻量级:JSON Schema 是一种轻量级的模式语言,易于学习和使用。 * 灵活性:JSON ...

    JSON--List集合转换成JSON对象详解

    反之,如果集合元素不是标准类型,JSON则无法识别所需数据。 以上知识点,不仅包括了将List集合转换为JSON对象的基本方法,还涉及到了在实际开发中可能遇到的问题及其解决方法,包括对特定框架和库的使用,对敏感...

    android解析JSON数据详解.pdf

    在Android中,处理JSON数据涉及四个核心类和一个异常类: 1. **JSONObject**: 表示一个JSON对象。它由一组Key/Value对组成,外部表现为一个被大括号包围的字符串。可以通过`put()`方法添加键值对,`get()`用于获取...

    MySql于Java数据类型对应列表

    ### MySQL与Java数据类型对应详解 #### 概述 在进行数据库操作时,尤其是在使用Java进行MySQL数据库开发的过程中,正确地映射数据类型是至关重要的一步。本文将详细介绍MySQL中的各种数据类型及其在Java中的对应...

    JSON数据模型:一个用于在Redis中存储和操作JSON数据的模块

    总结来说,RedisJSON为Redis添加了对JSON数据的强大支持,使Redis成为处理JSON数据的理想平台。无论是简单地存储和检索JSON文档,还是进行复杂的查询和更新操作,RedisJSON都能提供高效且易于使用的解决方案。在实际...

    JSON知识点详解.pdf

    JSON与JavaScript对象有显著不同之处在于,JSON数据格式中不允许使用函数,以及JavaScript中的undefined值,在JSON中必须表示为字符串或其他已定义的数据类型。 JSON在Web应用中常见的用途是用于数据交换。它经常被...

    河南省18个地市的行政区化图mapJSON数据

    "河南省18个地市的行政区化图mapJSON数据"这个标题指出,我们有一个数据资源,它是关于中国河南省的地图信息,具体形式是MapJSON格式。MapJSON是一种常见的地理信息数据结构,主要用于描绘地理区域的边界、属性等...

    微信小程序获取json页面数据

    在`success`回调函数中,直接通过`console.log(res.data)`打印出服务器返回的JSON数据,这展示了微信小程序处理JSON数据的便捷性。 #### 六、总结 本文详细介绍了如何在微信小程序中获取JSON页面数据的方法及步骤...

    echarts,美国,json数据,最新

    **ECharts 美国地图JSON数据详解** 在数据分析和可视化领域,ECharts是一个非常流行的JavaScript库,它提供了丰富的图表类型和高度交互的功能,适用于Web应用程序。本篇将详细介绍如何利用ECharts结合美国地图JSON...

    echarts地图最新东莞区域地图坐标json数据

    2. **坐标结构**:JSON数据中,每个行政区域都会有一个包含多个坐标点的对象。例如: ``` { "name": "莞城区", "children": [ { "type": "polygon", "coordinates": [[经度1, 纬度1], [经度2, 纬度2], ...] ...

    广东echarts地图json数据

    使用这些JSON数据时,我们需要在ECharts的配置项中指定地图类型为“广东”,并提供相应的数据源。例如: ```javascript var myChart = echarts.init(document.getElementById('main')); var option = { title: { ...

    JSON入门与实战详解

    3. **数组**:在JSON中,数组包含零个或多个值,这些值可以是任何JSON数据类型。 ```json [ "apple", "banana", "cherry" ] ``` 4. **数据类型**:JSON支持以下数据类型: - 字符串(String) - 数字...

    android解析JSON数据详解借鉴.pdf

    总的来说,Android开发中解析JSON数据是一项基础且重要的任务,理解并熟练运用`JSONObject`和`JSONArray`类是处理JSON数据的关键。在实际开发中,还需要注意错误处理和数据验证,确保数据的正确性和安全性。

Global site tag (gtag.js) - Google Analytics