开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1362|回复: 16
收起左侧

[其它] JSON基础理论与实践

[复制链接]

结帖率:100% (2/2)
发表于 2023-4-5 14:02:13 | 显示全部楼层 |阅读模式   四川省绵阳市
背景:最近应该有很多人看见了,突然多了一个人混问答区,不才想混个荣誉666.在近半个月的问答区的抢答过程中,发现了一些很有意思的事情。促使我想来整理一下JSON的基础。很多人都会用JSON,喜欢用JSON,但是对JSON的理解并没有想象中那么透彻。

1、JSON是什么?

   官方定义:JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScriptEuropean Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率


   说人话:就是以固定标准格式字符串记录的数据。那是什么样的标准格式呢?

2、JSON的标准格式?

   1. 六个构造字符(且必须为半角字符,部分模块可能会优化替换全角字符为半角字符):“ [ ” 、“ ] ” 、“ { ”、“ } ”、“ : ”、“ , ”
       其中 “ [ ” 、“ ] ” 与 “ { ”、“ } ”必然是成对出现。


   2. 在这六个构造字符的前或后允许存在无意义的空白符
      例如:空格,回车[字符 (13)],换行[字符 (10)] 等...
      注意:是在六个构造字符的前或者后


3.JSON的构成:
     其格式对应逻辑:key:value 的键对值 一个key对应一个value
     key:必须被双引号包围,这时候注意上一条。空白符问题。如果在双引号外出现空白符属于是构造字符前后,如果是在双引号内则是改变了key的值。
value: 值的类型共计4种:数组对象字符串数值
     最简单的JSON :
        value的值为字符串:  {"name":"钥匙"}                     字符串必须由双引号包围
        value的值为数值:      {"age":29}                             数值则无其它符号包围
        value的值为对象:      {"obj":{"name":"钥匙"}}          对象的定义可粗暴的认为内部也是一串单独的JSON,拎出来可以单独解析的那种。
        value的值为数组数组的定义可以说是最有意思的了,他的值可以包含上面所有:
                 数值可以: {"data":[1,2,3]}
                 字符串可以:{"data":["钥匙","精易论坛","精易论坛的钥匙"]}
                 对象也可以:{"data":[{"name":"钥匙","age":29},{"name":"精易论坛","age":14}]}
                 甚至可以混合组成 : {"data":[1,2,"精易论坛",{"name":"钥匙","age":29},{"name":"精易论坛","age":14},[0,1]]}
        但是不论数组的组合有多少种方式,都有一个共性:每个成员中间都是用的构造字符(,)进行分隔分隔后的每个成员必须满足值为字符串、数组、对象、数组的四种基本类型。


3、JSON的一些误区
  
     很多人初次接触JSON大多数是在学习POST的过程中,从接口/网页中截取的JSON数据。但很多时候截取的数据却怎么都没有办法解析。请各位新手注意:JS对象与JSON字符串的根本定义
[JavaScript] 纯文本查看 复制代码
var obj = {name: '钥匙', age: 29}; //这是一个对象,注意键名也是可以使用引号包裹的

   
[JavaScript] 纯文本查看 复制代码
var json = '{"name": "钥匙", "age": "29"}'; //这是一个 JSON 字符串,本质是一个字符串

    上面代码中很简单明确的能看出。第二段的JSON是被单引号所包围的本质是一个字符串。而第一段没有被单引号包围是JS对象。

4、JSON的实例解析
      QQ图片20230405134116.png
     简单看个图解,右侧树状图清晰可见JSON结构,JSON取数据的路径逻辑:每层的key值,以【.】间隔;
    例如:
      取出上图中data对象的totalPages数值 data为一个对象,totalPages为一个数值 路径组合为:data.totalPages;
      取出上图中data对象的content数组下的第一个值里面的id,这时content变成了一个数组了怎么来去呢?方法很简单,用[0],[1],[2]....的方式来表示数组中下标位置,注意:下标从0开始,路径组合为:data.content[0].id;
    以上截图解析代码见附件。

5、JSON的一些工具

     线上解析工具:https://tool.chinaz.com/tools/jsoneditor.aspx
     线上格式校验:https://www.bejson.com/
     一些优质解析模块:精易模块,YYJSON,zyJson的JSON解析等等...
     第一次发教程贴,文章简陋...见谅!~~~



补充内容 (2023-4-8 21:19):
突然想到一个东西今天在问答区遇见的:所有易语言的JSON一概转码一次最好。UTF-8转ASIN。编码里面的东西太多。太坑了。

JSON解析实例.e

1.12 MB, 下载次数: 31, 下载积分: 精币 -2 枚

实例调用模块.zip

1.15 MB, 下载次数: 16, 下载积分: 精币 -2 枚

评分

参与人数 3好评 +3 精币 +10 收起 理由
猥琐小胖子 + 1 + 4 奉上小小红包希望笑纳
撒加 + 1 + 5 YYDS~!
易神 + 1 + 1 感谢分享,很给力!~

查看全部评分


结帖率:100% (3/3)

签到天数: 22 天

发表于 2023-7-15 20:17:17 | 显示全部楼层   广东省深圳市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2023-7-9 09:09:03 | 显示全部楼层   四川省成都市
学习了,大佬辛苦
回复 支持 反对

使用道具 举报

发表于 2023-7-7 17:50:56 | 显示全部楼层   山东省枣庄市
回复 支持 反对

使用道具 举报

发表于 2023-5-12 23:44:28 | 显示全部楼层   辽宁省辽阳市
学习了,大佬辛苦
回复 支持 反对

使用道具 举报

签到天数: 12 天

发表于 2023-5-4 07:41:43 | 显示全部楼层   广东省韶关市
支持楼主
回复 支持 反对

使用道具 举报

结帖率:88% (68/77)

签到天数: 1 天

发表于 2023-4-25 18:55:30 | 显示全部楼层   福建省泉州市
学习了,大佬辛苦
回复 支持 反对

使用道具 举报

发表于 2023-4-18 22:59:23 | 显示全部楼层   广东省广州市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 7 天

发表于 2023-4-18 22:18:42 高大上手机用户 | 显示全部楼层   广东省惠州市
666666666666
回复 支持 反对

使用道具 举报

结帖率:0% (0/3)

签到天数: 7 天

发表于 2023-4-7 20:33:13 | 显示全部楼层   浙江省台州市
看看


谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表