JSON格式讲解

本文介绍了JSON,一种易于阅读和编写的轻量级数据格式,支持跨语言解析和生成,常用于服务器与JavaScript客户端交互。文章详细讲解了JSON的两种数据结构(对象和数组),以及它们的规则和示例。此外,还提到了JSON在线解析的概念。
摘要由CSDN通过智能技术生成

JSON

  • 简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。简单地说,JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从web客户端传递给服务器端程序。JSON具有良好的可读性和便于快速编写的特性,适合于服务器与JavaScript客户端的交互,是目前网络中主流的数据传输格式之一,应用十分广泛。

二、JSON的特点

1、便于阅读和书写

除了JSON格式,还有一种数据传输格式XML,相对于XML,JSON更加便于阅读和书写。

2、独立于编程语言

JSON完全独立于编程语言,几乎所有的编程语言和开发环境中,都有解析和生成JSON字符串的库,比如:

# C

Jansson、cJson

#C++

jsonCpp、JSON for Modern C++

#Java

Json-lib、org-json

#Android

Gson、FastJson

#Qt

QJsonxxx

3、网络传输的标准数据格式

三、JSON的两种数据格式

JSON有两种数据格式

  1. JSON对象
  2. JSON数组

规则:大括号包裹的是JSON对象,中括号包裹的是JSON数组

1、JSON数组

JSON数组格式:

[元素1, 元素2, 元素3, ... 元素n ]

类似于C/C++中的数组,元素之间以逗号分隔

不同的是,JSON数组中的元素可以是不同的数据类型,包括:整形、浮点、字符串、布尔类型、JSON数组、JSON对象、空值

JSON数组中的元素是同一类型

#元素类型都是数字

[1, 2, 3, 4]

#元素类型都是字符串

[“Spring”, “Summer”, “Autumn”, “Winter”]

JSON数组中的元素是不同类型

[1, 2, 5, “hello”, true, false, null]

JSON数组的嵌套

[

[1, 2, 3, 4],

[“Spring”, “Summer”, “Autumn”, “Winter”],

[1, 2, 5, “hello”, true, false, null]

]

JSON数组的嵌套JSON对象

[

{

“name”: “Tom”,

“age”: 18,

“gender”: “male”

},

{

“name”: “Tom”,

“age”: 18,

“gender”: “male”

}

]

2、JSON对象

JSON对象格式:

{

“key1”: value1,

“key2”: value3,

“key3”: value3

}

JSON对象内部使用键值对的方式来组织

还可以嵌套JSON对象和JSON数组

{

“name”: “China”,

“info”: {

“capital”: ”beijing”,

“asian”: true,

“founded”: 1949

},

“provinces”: [{

“name”: “shandong”,

“capital”: “jinan”

},

{

“name”: “zhejiang”,

“capital”: “hangzhou”

}

]

}

四、JSON在线解析

Json.cn

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
DREAMPlace是一个开源的芯片布局布线工具,其json数据文件用于描述电路设计中的物理布局和布线,其结构如下: ```json { "dieArea": [ [x1, y1], [x2, y2] ], "tracks": [ { "layer": "M1", "start": 0, "num": 20, "step": 2, "origin": [0, 0] }, { "layer": "M2", "start": 0, "num": 10, "step": 1, "origin": [0, 0] } ], "gcells": [ { "id": 0, "lx": 0, "ly": 0, "width": 10, "height": 10, "site": 0, "orient": "N" }, { "id": 1, "lx": 0, "ly": 10, "width": 10, "height": 10, "site": 0, "orient": "N" } ], "nets": [ { "name": "net1", "connected_pins": [ { "id": 0, "node": 0 }, { "id": 1, "node": 0 } ], "weight": 1 }, { "name": "net2", "connected_pins": [ { "id": 2, "node": 0 }, { "id": 3, "node": 0 } ], "weight": 1 } ], "pins": [ { "id": 0, "net_id": 0, "gcell_id": 0, "layer": "M1", "orient": "N", "pos": [0, 0] }, { "id": 1, "net_id": 0, "gcell_id": 1, "layer": "M1", "orient": "N", "pos": [0, 10] }, { "id": 2, "net_id": 1, "gcell_id": 0, "layer": "M1", "orient": "N", "pos": [10, 0] }, { "id": 3, "net_id": 1, "gcell_id": 1, "layer": "M1", "orient": "N", "pos": [10, 10] } ] } ``` 其中,`dieArea`表示芯片的边界框;`tracks`表示布线的水平或垂直轨道;`gcells`表示物理单元格,即芯片中的基本单位;`nets`表示电路中的连线;`pins`表示端口,即与外部连接的引脚。 `tracks`中的每个元素包含以下属性: - `layer`: 轨道所在的层,如M1、M2等; - `start`: 轨道的起始索引; - `num`: 轨道数量; - `step`: 轨道之间的间距; - `origin`: 轨道的坐标原点。 `gcells`中的每个元素包含以下属性: - `id`: 单元格的唯一标识符; - `lx`: 单元格左下角的x坐标; - `ly`: 单元格左下角的y坐标; - `width`: 单元格的宽度; - `height`: 单元格的高度; - `site`: 单元格所在的站点; - `orient`: 单元格的方向。 `nets`中的每个元素包含以下属性: - `name`: 连线的名称; - `connected_pins`: 连线所连接的引脚; - `weight`: 连线的权重。 `pins`中的每个元素包含以下属性: - `id`: 引脚的唯一标识符; - `net_id`: 引脚所连接的连线; - `gcell_id`: 引脚所在的单元格; - `layer`: 引脚所在的层; - `orient`: 引脚的方向; - `pos`: 引脚的坐标。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值