格式说明

  1. json文件由对象(集合)、数组、key/value元素组成,可以相互嵌套。
  2. 使用大括号包围的是对象,使用中括号包围的是数组,冒号分隔的是元素。
  3. 元素的key只能是字符串。
  4. 元素的value数据类型可以是:
    • number:整数和浮点数都属于number类型,可以是正负数
    • string:字符串
    • bool:true/false
    • array:使用中括号包围的部分是array
    • object:使用大括号包围的是对象
    • null:空。一般是这个值本来应该是某个object的,但是object不存在,于是为Null
  5. 对象、数组容器中每个元素之间使用逗号隔开,容器的最后一个元素不加逗号
  6. 顶级对象都是匿名的,也就是没有key

下面是一个json格式数据的示例:

{
"id":1,
"content":"hello world",
"author":{
"id":2,
"name":"userA"
},
"published":true,
"label":[],
"nextPost":null,
"comments":[
{
"id":3,
"content":"good post1",
"author":"userB"
},
{
"id":4,
"content":"good post2",
"author":"userC"
}
]
}

用注释分析这个json:

{ # 对象容器,下面全是这个对象中的属性。注意key全都是字符串
"id":1, # 文章ID号,元素,value类型为number
"content":"hello world", # 文章内容
"author":{ # 子对象,文章作者
"id":2, # 作者ID
"name":"userA" # 作者名称,注意子容器结束,没有逗号
},
"published":true, # 文章是否发布,布尔类型
"label":[], # 文章标签,没有给标签,所以空数组
"nextPost":null, # 下一篇文章,是对象,因为没有,所以为null
"comments":[ # 文章评论,因为可能有多条评论,每条评论都是一个对象结构
{ # 对象容器,表示评论对象
"id":3, # 评论的ID号
"content":"good post1", # 评论的内容
"author":"userB" # 评论者
},
{
"id":4,
"content":"good post2",
"author":"userC"
}
]
}

一般来说,json格式转换成语言中的数据结构时,有以下几个比较通用的规则(只是比较普通的方式,并非一定):

  • json对象映射成语言中的hash/struct,有时候没有合适的结构,将映射成类。其实class、hash、struct在数据组织方式上都是一样的,都是key/value的容器
  • json数组映射成语言中的列表/数组/切片

例如,上面的示例,转换成Go中的数据结构时,得到的结果如下:

// 使用名称A代替顶层的匿名对象
type A struct {
ID int64 `json:"id"`
Content string `json:"content"`
Author Author `json:"author"`
Published bool `json:"published"`
Label []interface{} `json:"label"`
NextPost interface{} `json:"nextPost"`
Comments []Comment `json:"comments"`
} type Author struct {
ID int64 `json:"id"`
Name string `json:"name"`
} type Comment struct {
ID int64 `json:"id"`
Content string `json:"content"`
Author string `json:"author"`
}

比如转换成python中的数据时,得到的结果如下:

from typing import List, Any

class Author:
id: int
name: str def __init__(self, id: int, name: str) -> None:
self.id = id
self.name = name class Comment:
id: int
content: str
author: str def __init__(self, id: int, content: str, author: str) -> None:
self.id = id
self.content = content
self.author = author # 使用了名称A代替顶层的匿名对象
class A:
id: int
content: str
author: Author
published: bool
label: List[Any]
next_post: None
comments: List[Comment] def __init__(self, id: int, content: str, author: Author, published: bool, label: List[Any], next_post: None, comments: List[Comment]) -> None:
self.id = id
self.content = content
self.author = author
self.published = published
self.label = label
self.next_post = next_post
self.comments = comments

json转代码数据结构推荐工具

quicktype工具,可以轻松地将json文件转换成各种语言对应的数据结构。

地址:https://quicktype.io

在vscode中有相关插件

  1. 先在命令面板中输入"set quicktype target language"选择要将json转换成什么语言的数据结构
  2. 再输入"open quicktype for json"就可以将当前json文件转换对应的数据结构。

json数据格式说明的更多相关文章

  1. XML和JSON数据格式对比

    概念 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...

  2. VS快速生成JSON数据格式对应的实体

          有固定好的Json数据格式,你还在手动敲对应的实体吗?有点low了!步入正题,这是一个json字符串,先去验证JSON数据格式(http://www.bejson.com/)如下: { & ...

  3. jQuery EasyUI:根据数据库内容生成适合于easyui-tree的JSON数据格式

    1,jQuery EasyUI中easyui-tree特定的JSON数据格式 [ {"id":1,"text":"某公司","ch ...

  4. iOS 阶段学习第22天笔记(JSON数据格式介绍)

    iOS学习(OC语言)知识点整理 一.JSON数据格式 1)概念:json是一种网络数据传输格式,有值/对象:{“A”:1,”B”:”2”…}词典:对象的序列:[,,,,,]数组两种数据类型 2)UR ...

  5. JS中将JSON的字符串解析成JSON数据格式《转》

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  6. JSON 数据格式

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易 ...

  7. JSON数据格式

    JSON 数据格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人 ...

  8. MVC返回JSON数据格式书写方式

    返回json数据格式,多个返回值加,隔开 [Route("api/users/web")] //如果不加这个路由请这样调用:/api/users/web?schoolname=十五 ...

  9. VS中快速生成json数据格式对应的实体

    JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标注. {} 双 ...

  10. (转)JSON数据格式和js操作json总结

    原:http://niutuku.com/tech/javaScript/273643.shtml JSON数据格式和js操作json总结 来源:niutuku.com |         vince ...

随机推荐

  1. SVN服务端和客户端的安装与搭建

    版权声明:本文为博主原创文章,转载请注明原文出处. https://blog.csdn.net/zzfenglin/article/details/50931462 SVN简介 SVN全名Subver ...

  2. MyBatis配置C3P0连接池

    一.导包 c3p0包     mybatis包 数据库的连接包 二.继承UnpooledDataSourceFactory的类 Mybatis 没有帮开发者实现 c3p0 数据库连接池,故需要使用者自 ...

  3. ubuntu16 mysql在线安装

    输入"sudo apt-get update"-->回车-->"输入root用户的密码"-->回车: 输入"sudo apt-get ...

  4. [已解决]Cannot find one or more components.Please reinstall the application

    Microsoft SQL Server Management Studio 17,一段时间未用出现Cannot find one or more components.Please reinstal ...

  5. openGL-计算机图形大作业中出现的几个错误及解决

    错误一 错误现象:按动相应按键i和o无法在x轴和y轴移动camera,但按相应按键p可以在z轴移动camera. 错误原因:为了移动camera,设置了三个全局变量x.y.z,用于gluLookAt( ...

  6. PMP:11.项目采购管理

    项目采购管理包括从项目团队外部采购或获取所需产品.服务或成果的各个过程.  项目采购管理包括编制和管理协议所需的管理和控制过程,例如,合同.订购单.协议备忘录 (MOA),或服务水平协议 (SLA). ...

  7. 腾讯开源 MMKV — 基于mmap的高性能通用key-value组件

    一.介绍 MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强.从 2015 年中至今,在 iOS 微信上使用已有近 3 ...

  8. .net core 发布linux报错“The configured user limit (128) on the number of inotify instances has been reached”

    https://stackoverflow.com/questions/45875981/error-while-reading-json-file-in-dotnet-core-the-config ...

  9. 在react中使用less(官方做法)

    概述 在用create-react-app搭建react app的时候,原生并不支持less,只支持css.不过create-react-app官方给了一种方法使用less,我觉得很有用,记录下来,供 ...

  10. js代码跑马灯效果-----轮播图字效果!

    文字元素: <p id="yc-msg">你有本事来打我呀!</p> js执行代码: function ycMsg() { // 获取 标签 var pOb ...