前言

通过本篇博客,我会和大家一起学习Json的操作,我们会在简单认识Json后通过一个小案例来让大家更清晰的认识和操作Json,希望本篇博客能为大家的工作过程中带来一些帮助与启发。

若当前文章对你有所帮助,欢迎关注微信公众号小小Unity,我会定期在微信公众号上发布一些关于Unity的专栏知识与一些开发资源

​1.1 初识JSON

21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。当时通用的数据交换语言是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,成为了互联网上最受欢迎的数据交换格式。

1.1.1 JSON 语法规则

JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中

  • 数据由逗号分隔

  • 花括号保存对象

  • 方括号保存数组

1.1.2 JSON 名称/值对

JSON 数据的书写格式是:名称/值对。

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"firstName" : "John"

这很容易理解,等价于这条 JavaScript 语句:

firstName = "John"

1.1.3 JSON 值

JSON 值可以是:

  • 数字(整数或浮点数)

  • 字符串(在双引号中)

  • 逻辑值(true 或 false)

  • 数组(在方括号中)

  • 对象(在花括号中)

  • null

1.1.4 JSON 对象

JSON 对象在花括号中书写:

对象可以包含多个名称/值对:

{ "firstName":"John" , "lastName":"Doe" }

这一点也容易理解,与这条 JavaScript 语句等价:

firstName = "John"
lastName = "Doe"

1.1.5 JSON 数组

JSON 数组在方括号中书写:

数组可包含多个对象:

{"employees": [{"firstName": "John","lastName": "Doe"},{"firstName": "Anna","lastName": "Smith"},{"firstName": "Peter","lastName": "Jones"}]
}

在上面的例子中,对象 “employees” 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。

1.2 JSON实例

1.数组方式 [ ]

[{"id": 1,"name": "xiaoming"},{"id": 2,"name": "xiaohong"}
]

2.对象方式 { }

{"status": 0,"msg": "SUCCESS","data": [{"id": 1,"name": "xiaohong"},{"id": 2,"name": "xiaoming"}]
}

3.反例

{"id" : ox16 } //不合法,数值需要是十进制
{"name" : underfined } //不合法,没有该值
[{
"name" : NUll,
"school" : function()
{
console.log("该写法是错误的")
}//不合法
}]//json中不能使用自定义函数,或系统内置函数

4.复合json

{"project": "Unity精品专栏之序列化Json操作Json","projectTime": "s20210105","data": {"searchData": [{"elements": [{"id": 1001,"name": "无影剑-艾雷诺","icon": "Json/Equip/无影剑-艾雷诺","count": 5,"getPosition": {"lat": 34.685087,"lng": 135.805},"hasShell": false,"quality": "史诗","price": 95825,"infomation": "DNF中史诗装备"},{"id": 1002,"name": "太极天帝剑","icon": "Json/Equip/太极天帝剑","count": 5,"getPosition": {"lat": 14.685087,"lng": 35.805},"hasShell": false,"quality": "史诗","price": 123123,"infomation": "DNF中史诗装备"},{"id": 1003,"name": "星之海·罗睺","icon": "Json/Equip/星之海·罗睺","count": 5,"getPosition": {"lat": 14.685087,"lng": 35.805},"hasShell": false,"quality": "史诗","price": 758959,"infomation": "DNF中史诗装备"},{"id": 1004,"name": "无尽之刃","icon": "Json/Equip/无尽之刃","count": 5,"getPosition": {"lat": 194.685087,"lng": 325.805},"hasShell": false,"quality": "史诗","price": 9568,"infomation": "英雄联盟中史诗装备"},{"id": 1005,"name": "三相之力","icon": "Json/Equip/三相之力","count": 5,"getPosition": {"lat": 134.685087,"lng": 325.805},"hasShell": false,"quality": "史诗","price": 32658,"infomation": "英雄联盟中史诗装备"},{"id": 1006,"name": "多兰剑","icon": "Json/Equip/多兰剑","count": 35,"getPosition": {"lat": 13.685087,"lng": 32.805},"hasShell": true,"quality": "普通","price": 126,"infomation": "英雄联盟中初始装备"},{"id": 1007,"name": "多兰盾","icon": "Json/Equip/多兰盾","count": 35,"getPosition": {"lat": 3.685087,"lng": 32.805},"hasShell": true,"quality": "普通","price": 256,"infomation": "英雄联盟中初始装备"},{"id": 1008,"name": "多兰戒","icon": "Json/Equip/多兰戒","count": 35,"getPosition": {"lat": 59.685087,"lng": 32.805},"hasShell": true,"quality": "普通","price": 300,"infomation": "英雄联盟中初始装备"}],"type": "Equip","title": "热门装备"},{"elements": [{"id": 2001,"name": "频道喇叭","icon": "Json/Expoend/频道喇叭","count": 35,"getPosition": {"lat": 99.685087,"lng": 32.805},"hasShell": true,"quality": "普通","price": 622,"infomation": "向当前频道的玩家发言"},{"id": 2002,"name": "命运硬币","icon": "Json/Expoend/命运硬币","count": 35,"getPosition": {"lat": 99.685087,"lng": 32.805},"hasShell": true,"quality": "普通","price": 655,"infomation": "概率恢复角色人物一定百分比的生命值。"},{"id": 2003,"name": "红药水","icon": "Json/Expoend/红药水","count": 35,"getPosition": {"lat": 99.685087,"lng": 32.805},"hasShell": true,"quality": "普通","price": 958,"infomation": "瞬间恢复自身血量"},{"id": 2004,"name": "蓝药水","icon": "Json/Expoend/蓝药水","count": 35,"getPosition": {"lat": 99.685087,"lng": 32.805},"hasShell": true,"quality": "普通","price": 956,"infomation": "瞬间恢复自身能量"},{"id": 2005,"name": "瞬间移动药剂","icon": "Json/Expoend/瞬间移动药剂","count": 35,"getPosition": {"lat": 99.685087,"lng": 32.805},"hasShell": true,"quality": "普通","price": 125,"infomation": "可通过此药剂瞬间传送到地图的任意位置"}],"type": "Expoend","title": "热门消耗品"}],"dateTime": "2021-01-15 10:52:27.811321"}
}

这一节我们就先到这里,从下节开始我们通过开发一个Demo案例来继续深入学习怎么解析Json以及怎么对Json的数据进行操作

大家下节见

Unity精品专栏之序列化操作之Json相关推荐

  1. Unity精品专栏之序列化操作之Json案例篇(上)

    1.3 Json案例:使用Unity解析上述复合JSON 前言 通过本篇博客,我会和大家通过一个案例来学习Json的操作,希望本篇博客能为大家的工作过程中带来一些帮助与启发. 若当前文章对你有所帮助, ...

  2. python json dumps 自定义_Python json.dumps 自定义序列化操作

    def login_ajax(request): if request.method == "GET": return render(request, 'login_ajax.ht ...

  3. go json tag 字符串 整数_json:你或许还不知道的序列化操作(一)

    前言 平时工作当中经常使用json的序列化或者反序列,但是偶尔也会发现你定义的结构体使用json序列化或者反序列化的时候不是你期望的结果,我也经常遇到这种,所以我通过读源码之后总结了一些可能让人诧异的 ...

  4. dict转json保存_14、序列化操作,类的保存和dict转JSON

    在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但 ...

  5. CSDN【精品专栏】第三期

    专栏文章都是博主精心编写的.根据自己学习经验总结出来的文章,文章内容质量上都还算不错的,而很多用户还不知道我们这些优质的专栏,所以以后每周我们都会推荐一些优质专栏,目前我们的精品专栏已经推荐2期了哦, ...

  6. .Net 中关于序列化和反序列化Json的方法

    .Net SDK中关于序列化和反序列化Json的方法 项目中遇到和服务端交互时需要传递数据包为json格式的包,所以在服务端和SDK中都需要对json进行解析和组合的操作, 并且对一些复杂结构的jso ...

  7. 福利丨0元得3000+视频课精品专栏,邀好友得奖金!

    福利来啦! CSDN官方精选3000+视频&3000+精品专栏 今天可以免费学啦! 操作步骤 1.支付9.9元 2.邀请好友购买,获得返利 2 位好友购买 = 你免费学! 4 位好友购买 = ...

  8. 一文了解Python常见的序列化操作

    关于我 编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. 联系:hylinux1024@gmail ...

  9. Java基础/利用fastjson序列化对象为JSON

    利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 ...

最新文章

  1. pythontcp服务器框架_tcp服务器框架python
  2. jovi智慧场景运动步怎么是零_Jovi智慧场景,赛事直播提前提醒,让你不错过任何一刻的精彩...
  3. Ubuntu_Win10双系统互换注意事项以及蓝屏解决方案
  4. P1032 字串变换(bfs)
  5. 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求
  6. java mysql order by,java-使用LIMIT和MySQL进行ORDER BY
  7. android emulator虚拟设备分析第三篇之pipe上的qemud service
  8. OpenFlow网络中处理正常流量的工作流程
  9. 从运维的角度理解云原生
  10. NAND FLASH读写原理
  11. python计算2的20次方_Python学习二运算符
  12. 解析oracle sqllder日志,sqlloader 参数
  13. 软件测试【个人简历】展示模板
  14. Failed to read artifact descriptor for com.google.errorprone:javac:jar:9+181-r4173-1
  15. 推荐系统系列——经典推荐算法
  16. 获取股票历史数据——数据采集(1)
  17. input单选框 复选框 点选不上 选不中
  18. 【总结】期望和方差以及为什么方差是要除以n-1
  19. 经典网络架构学习-Transformer
  20. 嵌入式计算机是专用计算机系统,嵌入式系统是一种专用的计算机系统.doc

热门文章

  1. coures包下载和安装 可解决报错ImportError: No module named '_curses'
  2. 阿里云云效:代码提交使用
  3. Pycharm浏览器打开报错解决
  4. 《天天学敏捷:Scrum团队转型记》读书笔记
  5. Python find()方法
  6. 关于Xcode设置网络代理
  7. 教我怎么写连笔字签名胡彦清
  8. 时光荏苒,白驹过隙。2018年总结!
  9. 支持串口上传图片和数据到服务器的4G低功耗摄像头方案
  10. 超市自动收款机php,自助收银机,超市无人自动收银系统,海信自助POS,自助收款机...