JavaScript学习理解之JSON(总结分享)

本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了关于json的相关问题,包括了json对象、json数组和json字符串等等,希望对大家有帮助。

JavaScript学习理解之JSON(总结分享)

相关推荐:javascript教程

1、JSON对象

任务描述

本关任务:练习在JavaScript中定义JSON对象。

具体要求如下:

立即学习“Java免费学习笔记(深入)”;

定义一个JSON对象JSONObject,它有三个属性:key1、key2和key3,它们的值分别是参数a、b和c;

删除其中名字为key3的属性;

删除完成后,遍历其余的所有属性,返回各属性的值连接成的字符串,中间用,隔开

JSON既然是用来传递数据的,必然要先存储数据,存储数据需要采用一定的数据格式,JSON常用的数据格式有JSON对象、JSON数组和JSON字符串。

什么是JSON对象

JSON对象(通常叫JSON)是一种文本数据的交换格式,用于存储和传输数据。示例如下:

{"name":"Jerry", "age":15}

这就是一个简单的json对象,它的规则是:

数据以键/值对的形式存在;数据之间用逗号间隔;大括号表示保存对象;方括号表示保存数组。

JSON对象与Javascript对象的区别

JSON是基于JavaScript语法的,所以JSON中也有对象的概念,但是和JavaScript中的对象有一些小的区别。

定义一个JavaScript对象:

var myObject = {    id:1,    name:"Peter Bruce",    "first name":"Bruce",    display:function() {                console.log(this.name);            }}

定义一个JSON对象:

{"id":1,"name":"Peter Bruce","first name":"Bruce"}

三点区别:

(1)JSON对象的属性名(key)必须被包含在双引号之中,而JavaScript对象除了有空格的属性名、中间有连字符-的属性名必须在双引号之中外,其它随意;
(2)不能在JSON对象中定义方法,而在JavaScript对象中可以;
(3)JSON对象可以被很多语言操作,而JavaScript对象只有JS自己可以识别

定义JSON对象的方法如下

用一个{}包含在内,内部是若干个属性名和属性值构成的键值对,键值对之间用,隔开,属性名和属性值之间用:隔开,属性值可以是以下任意一种数据类型的数据:数字、字符串、JSON数组、JSON对象、null。如:

 {"a":1,"b":2.12,"c":true,"d":"string","e":null};

属性值是JSON数组或者JSON对象的情况稍复杂,后面的关卡将介绍。

在JavaScript中使用JSON对象

支持JSON的语言都能够使用JSON对象,这里仅介绍在JavaScript中如何使用JSON对象。

在JavaScript中定义一个JSON对象:

var jsonObject = {"name":"js","number":2};

操作属性,使用.或者[]

console.log(jsonObject.name);//读属性,输出jsconsole.log(jsonObject["name"]);//读属性,输出jsjsonObject.name = "javascript";//写属性,给name属性赋值javascript

删除属性,使用delete:

var jsonObject = {"name":"js","number":2};delete jsonObject.name;//删除name属性

遍历属性,使用for-in循环:

var jsonObject = {"name":"js","number":2};for(att in jsonObject) {  console.log(jsonObject[att]);  //依次输出js、2}

代码文件

function mainJs(a,b,c) {//请在此处编写代码/********** Begin **********/    var JSONObject = {"key1":a,"key2":b,"key3":c};    delete JSONObject.key3;    return a+","+b;/********** End **********/}

2、JSON数组

任务描述

本关任务:定义并操作JSON键值对中的值。

具体要求如下:

立即学习“Java免费学习笔记(深入)”;

已知myJson的第三个属性的值是一个数组,参数a是一个数字,要求将数组中前a个元素(这些元素都是字符串类型)拼接起来,元素之间用,隔开,返回拼接后的字符串;比如a为2的时候,你需要返回js,java。

JSON属性对应的值(value)是一个数组

JSON键值对中的值(value)可以是一个数组

比如:

{"country":"China","population":"1.3billion","bigCity":["Peking","Shanghai","ShenZhen","HongKong"]}

属性bigCity的值有多个,放在一个数组里面。

Find JSON Path Online Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30 查看详情 Find JSON Path Online

上面例子里面,数组的每一个元素都是字符串。其实,数组的每一个元素还可以是另外一个json对象。比如:

{"class":"高三一班","studentNumber":70,"score":[    {"name":"LiMing","score":128},    {"name":"ZhangHua","score":134},    {"name":"ShenLu","score":112}]}

上面的score属性的值是一个数组,这个数组的每一个元素是一个json对象。

数组的一些操作

读写元素:

var myJson = {"country":"China","population":"1.3billion","bigCity":["Peking","Shanghai","ShenZhen","HongKong"]}console.log(myJson.bigCity[1]);//打印出ShanghaimyJson.bigCity[0] = "GuangZhou";//第一个元素被赋值为GuangZhou

遍历:

var myJson = {"country":"China","population":"1.3billion","bigCity":["Peking","Shanghai","ShenZhen","HongKong"]}for(var i = 0;i < myJson.bigCity.length;i++) {    console.log(myJson.bigCity[i]);//依次输出Peking,Shanghai,ShenZhen,HongKong}

代码文件

【第一种方法是后来写的,刚开始用的是下面的第二种办法,因为当时做不出来,就想着直接输出】

var myJson = {    "category":"computer",    "detail":"programming",    "language":[    "js","java","php","python","c"    ]}function mainJs(a) {    a = parseInt(a);//请在此处编写代码/********** Begin **********/    var b = "";    for(var i=0;i<a;i++){        b = b+myJson.language[i]+",";    }    return b.slice(0,-1);/********** End **********/}
var myJson = {    "category":"computer",    "detail":"programming",    "language":[    "js","java","php","python","c"    ]}function mainJs(a) {    a = parseInt(a);//请在此处编写代码/********** Begin **********/    if(a==1){        return myJson.language[0];    }    if(a==2){        return myJson.language[0]+","+myJson.language[1];    }    if(a==3){        return myJson.language[0]+","+myJson.language[1]+","+myJson.language[2];    }    if(a==4){        return myJson.language[0]+","+myJson.language[1]+","+myJson.language[2]+","+myJson.language[3];    }    if(a==5){        return myJson.language[0]+","+myJson.language[1]+","+myJson.language[2]+","+myJson.language[3]+","+myJson.language[4];    }/********** End **********/}

3、JSON字符串

任务描述

本关任务:练习JSON字符串和JavaScript对象的相互转换。

具体要求如下:

立即学习“Java免费学习笔记(深入)”;

先将JSON字符串JSONString转换为JavaScript对象JSONObject;然后将JSONObject的key1属性的值设置为mainJs()函数的参数a;最后将JSONObject转换为JSON字符串,并返回该字符串

在前端和后台之间传递数据可以使用JSON,但是实际上传递的是JSON字符串,而JSON对象是不可以直接进行传递的。

JSON字符串

JSON字符串就是在JSON对象两边套上'形成的字符串,如:

var JSONObject  = {"k1":"v1","k2":"v2"};//JSON对象var JSONString1 = '{"k1":"v1","k2":"v2"}';//JSON字符串

上面的JSONSring1就是JSON字符串,可以直接从前端传到后台或者后台传到前端。

当JavaScript收到从后台传来的JSON字符串后,怎么把它变成JSON对象方便处理呢?

JSON字符串到JavaScript对象

JSON.parse(a,b)方法将JSON字符串a转换为JavaScript对象。b是一个可选的函数参数。

var JSONString1 = '{"k1":"v1","k2":"v2"}';console.log(JSON.parse(JSONString1));//输出Object {k1: "v1", k2: "v2"}

函数参数b按从里到外的顺序作用在对象的所有属性上,最后一个作用的是对象本身:

//对象的每一个属性的值加1var text = '{ "key1":1, "key2":2, "key3":2.2}';var obj = JSON.parse(text, function (key, value) {    if(key === '')//当遇到对象本身时,不进行加1操作        return value;    return value+1;//对属性值加1});console.log(obj);    //输出Object {key1: 2, key2: 3, key3: 3.2}

如上面所示,函数的参数有两个,其中key表示属性的名字,value表示属性的值,当遇到对象本身时,key的值为'',即空字符串。

JSON对象转换为JSON字符串

JSON.stringify(a,b,c)a是待转换的JSON对象,b和c为可选参数。

var JSONObject = {"k1":"v1","k2":"v2"};JSON.stringify(JSONObject);//JSON对象转换为JSON字符串

参数b为函数时,该函数按照从里到外的顺序处理JSON对象的每一个属性,最后一个处理的是JSON对象本身,处理完后再转为JSON字符串:

//对象的所有属性值加1,再转为字符串var JSONObject = {"k1":1,"k2":2.2};var JSONString = JSON.stringify(JSONObject,function(k,v){    if(k === '')//处理到了JSON对象本身        return v;    return v+1;//所有的属性的值加1});console.log(JSONString);    //输出{"k1":2,"k2":3.2}

参数b还可以是数组,数组存储的是属性的名字,用来指定只转换哪些属性:

//转换对象中特定的属性var JSONObject = {"k1":1,"k2":2.2,"k3":3};var JSONString = JSON.stringify(JSONObject,["k1","k2"]);console.log(JSONString);//输出{"k1":1,"k2":2.2}

这里简单介绍一下c:

var str = ["name":"Tom","age":16];var obj1 = JSON.stringify(str);var obj2 = JSON.stringify(str,null,4);console.log(obj1);  //输出{"name":"Tom","age":16}console.log(obj2); //输出//{//    "name": "Tom",//    "age": 16//}

参数c:文本添加缩进、空格和换行符,如果 c 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 c 大于 10,则文本缩进 10 个空格。

代码文件

var JSONString = '{"key1":"value1","key2":"value2"}';function mainJs(a) {//请在此处编写代码/********** Begin **********/    var JSONObject = JSON.parse(JSONString);    JSONObject["key1"] = a;    JSONObject.key1 = a;    return JSON.stringify(JSONObject);/********** End **********/}

相关推荐:javascript学习教程

以上就是JavaScript学习理解之JSON(总结分享)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/552560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 20:43:34
下一篇 2025年11月9日 20:45:08

相关推荐

  • Vue.js应用中配置环境变量:灵活管理后端通信地址

    在%ignore_a_1%应用中,灵活配置后端api地址等参数是开发与部署的关键。本文将详细介绍两种主要的环境变量配置方法:推荐使用的`.env`文件,以及通过`cross-env`库在命令行中设置环境变量。通过这些方法,开发者可以轻松实现开发、测试、生产等不同环境下配置的动态切换,提高应用的可维护…

    2025年12月6日 web前端
    000
  • VSCode选择范围提供者实现

    Selection Range Provider是VSCode中用于实现层级化代码选择的API,通过注册provideSelectionRanges方法,按光标位置从内到外逐层扩展选择范围,如从变量名扩展至函数体;需结合AST解析构建准确的SelectionRange链式结构以提升选择智能性。 在 …

    2025年12月6日 开发工具
    000
  • JavaScript动态生成日历式水平日期布局的优化实践

    本教程将指导如何使用javascript高效、正确地动态生成html表格中的日历式水平日期布局。重点解决直接操作`innerhtml`时遇到的标签闭合问题,通过数组构建html字符串来避免浏览器解析错误,并利用事件委托机制优化动态生成元素的事件处理,确保生成结构清晰、功能完善的日期展示。 在前端开发…

    2025年12月6日 web前端
    000
  • JavaScript响应式编程与Observable

    Observable是响应式编程中处理异步数据流的核心概念,它允许随时间推移发出多个值,支持订阅、操作符链式调用及统一错误处理,广泛应用于事件监听、状态管理和复杂异步逻辑,提升代码可维护性与可读性。 响应式编程是一种面向数据流和变化传播的编程范式。在前端开发中,尤其面对复杂的用户交互和异步操作时,J…

    2025年12月6日 web前端
    000
  • JavaScript生成器与迭代器协议实现

    生成器和迭代器基于统一协议实现惰性求值与数据遍历,通过next()方法返回{value, done}对象,生成器函数简化了迭代器创建过程,提升处理大数据序列的效率与代码可读性。 JavaScript中的生成器(Generator)和迭代器(Iterator)是处理数据序列的重要机制,尤其在处理惰性求…

    2025年12月6日 web前端
    000
  • VSCode性能分析与瓶颈诊断技术

    首先通过资源监控定位异常进程,再利用开发者工具分析性能瓶颈,结合禁用扩展、优化语言服务器配置及项目设置,可有效解决VSCode卡顿问题。 VSCode作为主流的代码编辑器,虽然轻量高效,但在处理大型项目或配置复杂扩展时可能出现卡顿、响应延迟等问题。要解决这些性能问题,需要系统性地进行性能分析与瓶颈诊…

    2025年12月6日 开发工具
    000
  • VSCode的悬浮提示信息可以自定义吗?

    可以通过JSDoc、docstring和扩展插件自定义VSCode悬浮提示内容,如1. 添加JSDoc或Python docstring增强信息;2. 调整hover延迟与粘性等显示行为;3. 使用支持自定义提示的扩展或开发hover provider实现深度定制,但无法直接修改HTML结构或手动编…

    2025年12月6日 开发工具
    000
  • 优化PDF中下载链接的URL显示:利用HTML title 属性

    在pdf文档中,当包含下载链接时,完整的url路径通常会在鼠标悬停时或直接显示在链接文本中,这可能不符合预期。本文将探讨为何传统方法如`.htaccess`重写或javascript不适用于pdf环境,并提出一种利用html “ 标签的 `title` 属性来定制链接悬停显示文本的解决方…

    2025年12月6日 后端开发
    000
  • Phaser 3 游戏画布响应式适配:保持高度控制宽度

    本文旨在提供一种在 Phaser 3 游戏中实现画布响应式适配的方案,核心思路是利用 `Phaser.Scale.HEIGHT_CONTROLS_WIDTH` 缩放模式,使画布高度适应父容器,宽度随之调整,并始终居中显示。这种方法适用于需要保持游戏核心内容在屏幕中央,允许左右裁剪的场景。 在 Pha…

    2025年12月6日 web前端
    000
  • 洋葱浏览器下载文件安全吗_使用洋葱浏览器安全下载文件的注意事项

    首先验证.onion链接真实性,通过可信渠道获取并核对PGP签名;其次在虚拟机或沙盒中下载,关闭共享功能并校验文件哈希;接着使用多引擎扫描工具检测恶意代码,分析行为日志;最后严格管理浏览器权限,禁用JavaScript和第三方插件,定期清除痕迹。 如果您尝试通过洋葱浏览器下载文件,但对来源和操作方式…

    2025年12月6日 软件教程
    000
  • 分布式系统下的JavaScript消息队列实现

    答案:在Node.js中通过集成RabbitMQ或Kafka实现分布式系统消息通信。使用amqplib连接RabbitMQ,创建通道并声明交换机与队列,通过publish发送、consume接收消息,保障可靠性与解耦;或采用kafkajs连接Kafka集群,生产者向topic发消息,消费者订阅处理,…

    2025年12月6日 web前端
    000
  • Via浏览器为什么无法上传图片或文件_Via浏览器上传文件失败的原因及解决方法

    Via浏览器上传失败可因权限、设置或兼容性问题导致,需检查存储权限、启用JavaScript、更换User-Agent、使用系统文件选择器或清除缓存解决。 如果您在使用Via浏览器尝试上传图片或文件时遇到失败提示,可能是由于权限设置、浏览器配置或网页兼容性问题导致。此类问题通常可以通过调整设置或更换…

    2025年12月6日 电脑教程
    000
  • JavaScript语音识别与合成

    答案:JavaScript通过Web Speech API实现语音识别与合成。使用SpeechRecognition将语音转文本,需在安全上下文并获麦克风权限;利用SpeechSynthesis将文本转语音,可设置语速、音调等参数。两者结合可用于语音助手、无障碍阅读等场景,但语音识别兼容性有限,主要…

    2025年12月6日 web前端
    000
  • JavaScript持续集成与部署

    持续集成与部署(CI/CD)通过自动化测试、构建和部署提升JavaScript项目交付效率。1. CI指频繁合并代码并自动运行测试以快速发现错误;2. CD在CI通过后自动将应用部署至生产环境;3. 常用工具包括GitHub Actions、GitLab CI/CD、CircleCI和Jenkins…

    2025年12月6日 web前端
    000
  • 解决HTML锚点链接页面重载与URL路径丢失问题

    在使用html锚点链接进行页面内部导航时,开发者可能会遇到页面意外重载或url路径丢失的问题,导致无法正确滚动到目标区域。本文将深入探讨这一常见问题的根源,并提供一种简洁有效的解决方案:确保锚点链接的`href`属性包含当前页面的完整相对路径,从而实现平滑的页面内跳转,避免不必要的页面刷新和url结…

    2025年12月6日 后端开发
    000
  • JavaScript数据可视化进阶

    答案是%ignore_a_1%进阶需以叙事为核心,结合工具深度与交互设计。首先理解场景,选用D3.js、Chart.js或ECharts等工具,挖掘其数据驱动、动态更新与插件扩展能力;其次优化性能,通过Web Workers、LTTB算法和Canvas渲染处理大规模数据;再者增强交互,实现跨图表联动…

    2025年12月6日 web前端
    000
  • PDF文档中隐藏下载链接真实路径的教程

    本教程旨在解决pdf文档中下载链接显示完整url路径的问题,尤其是在鼠标悬停时暴露动态参数。文章将解释为何传统的.htaccess重写或javascript方法不适用于pdf环境,并提出一种利用html “标签的`title`属性来控制链接提示文本的有效策略,从而在不影响功能的前提下,优…

    2025年12月6日 后端开发
    000
  • JavaScript SVG动态矢量图形处理

    JavaScript结合SVG可实现高效动态图形处理,通过createElementNS创建带命名空间的SVG元素,动态生成如圆形等图形;利用setAttribute实时修改属性实现交互响应;借助requestAnimationFrame或事件驱动完成平滑动画;基于数据映射生成路径,支持折线图等复杂…

    2025年12月6日 web前端
    000
  • JavaScript内存泄漏检测与修复

    未清理的事件监听器、闭包引用大对象、全局变量滥用、定时器依赖外部作用域、DOM引用残留是JavaScript内存泄漏的五种典型场景。使用Chrome DevTools的Memory面板拍摄堆快照,对比操作前后对象数量变化,可发现Detached DOM trees等异常;通过Record alloc…

    2025年12月6日 web前端
    000
  • JavaScript代码分割策略

    JavaScript代码分割通过拆分代码、按需加载提升性能。1. 使用动态import()实现路由级懒加载,React结合lazy与Suspense,Vue用defineAsyncComponent;2. Webpack的SplitChunksPlugin提取公共依赖,分离vendor和共享模块,配…

    2025年12月6日 web前端
    000

发表回复

登录后才能评论
关注微信