【大一C语言项目】Cjson的认识与实现(一)
一、初识json
参考网站
菜鸟教程:JSONJSON介绍JSON在线解析
JSON是什么
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
JSON 具有自我描述性,更易理解
关键词提取:独立,数据对象,易理解,文本数据交换格式,轻量级,JS对象表示法
二、JSON语法
下面程序片段源自菜鸟教程:JSON,自己进行修改调试
JSON的基础语法
数据书写格式
key:value
可以理解为key=value
value形式
数字(整数或浮点数)
{ "age":19 }
字符串(在双引号中)
"name" : "zsl"
逻辑值(true 或 false)
{ "is_student":true }
数组(在中括号中),可以包含多个对象
{
"sites": [
{ "name":"鱼竿钓鱼干" , "url":"https://blog.csdn.net/qq_39354847" },
{ "name":"NEFU" , "url":"https://www.nefu.edu.cn/" },
]
}
对象(在大括号中)
{ "name":"鱼竿钓鱼干" , "url":"https://blog.csdn.net/qq_39354847" }
null
{ "json":null }
更多的语法细节
对象
在{}中,可以包含多个键/值对,并用","来分隔
{ "name":"鱼竿钓鱼干" , "url":"https://blog.csdn.net/qq_39354847" }
访问值
可以用"."或者[]来访问对象里的值,有点像C语言里的结构体
var myObj, x;
myObj = { "name":"zsl", "age":19, "site":null };
x = myObj.name;
var myObj, x;
myObj = { "name":"zsl", "age":19, "site":null };
x = myObj["age"];
循环对象
var myObj = { "name":"zsl", "age":19, "site":null };
for (x in myObj) {
document.getElementById("demo").innerHTML += x + "<br>";/*好像是html或者js用来输出的*/
}
循环对象的值
通过[]来访问值,但是这里使用点号好像不可以?(不确定对不对)
var myObj = { "name":"zsl", "age":19, "site":null };
for (x in myObj) {
document.getElementById("demo").innerHTML += myObj[x] + "<br>";/*好像是html或者js用来输出的*/
}
嵌套 JSON 对象
myObj = {
"name":"zsl",
"age":19,
"information": {
"blog":"https://blog.csdn.net/qq_39354847",
"class":"2020-06",
"email":"[email protected]"
}
}
嵌套 JSON 对象的访问
x=myObj.information.blog
修改值
点号或者[]都可以
x=myObj.information.blog = "https://blog.csdn.net/qq_39354847/article/details/113782561";
删除对象属性
delete myObj.information.blog;
数组
数组和对象其实差不多,所以不弄很细了
数组:使用[];使用数组下标[]索引
对象:使用{};点号和[]索引
对象中嵌套数组,数组再嵌套数组
myObj = {
"name":"网站",
"num":3,
"sites": [
{ "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻译" ] },
{ "name":"Runoob", "info":[ "菜鸟教程", "菜鸟工具", "菜鸟微信" ] },
{ "name":"Taobao", "info":[ "淘宝", "网购" ] }
]
}
利用循环输出上面的信息
for (i in myObj.sites) {
x += "<h1>" + myObj.sites[i].name + "</h1>";
for (j in myObj.sites[i].info) {
x += myObj.sites[i].info[j] + "<br>";
}
}
修改值与删除属性
myObj.sites[1] = "Github";
delete myObj.sites[1];
Tip:
delete 运算符并不是彻底删除元素,而是删除它的值,但仍会保留空间。
运算符 delete 只是将该值置为 undefined,而不会影响数组长度
三、项目目标
暂定目标
根据网上资料进行Cjson的编写,并实现对JSON语法的解析。
对JSON有初步了解和掌握,为未来相关课程学习做铺垫
熟悉网上已有Cjson项目,汲取其优点与编程思想
预期效果
在本地实现类似这个网站的JSON解析功能JSON在线解析