【JSON学习笔记】3.JSON.parse()及JSON.stringify()

news2024/12/23 8:33:46

前言

本章介绍JSON.parse()及JSON.stringify()。

JSON.parse()

JSON 通常用于与服务端交换数据。

在接收服务器数据时一般是字符串。

我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。

语法

JSON.parse(text[, reviver])

参数说明:

  • text:必需, 一个有效的 JSON 字符串。
  • reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。

JSON 解析实例
例如我们从服务器接收了以下数据:

{ "name":"csdn", "alexa":10000, "site":"www.csdn.com" }

我们使用 JSON.parse() 方法处理以上数据,将其转换为 JavaScript 对象:

var obj = JSON.parse('{ "name":"csdn", "alexa":10000, "site":"www.csdn.com" }');

解析前要确保你的数据是标准的 JSON 格式,否则会解析出错。

解析完成后,我们就可以在网页上使用 JSON 数据了:

实例

<p id="demo"></p>
 
<script>
var obj = JSON.parse('{ "name":"csdn", "alexa":10000, "site":"www.csdn.com" }');
document.getElementById("demo").innerHTML = obj.name + ":" + obj.site;
</script>

从服务端接收 JSON 数据
我们可以使用 AJAX 从服务器请求 JSON 数据,并解析为 JavaScript 对象。

实例

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myObj = JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML = myObj.name;
    }
};
xmlhttp.open("GET", "/try/ajax/json_demo.txt", true);
xmlhttp.send();

从服务端接收数组的 JSON 数据
如果从服务端接收的是数组的 JSON 数据,则 JSON.parse 会将其转换为 JavaScript 数组:

实例

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myArr = JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML = myArr[1];
    }
};
xmlhttp.open("GET", "/try/ajax/json_demo_array.txt", true);
xmlhttp.send();

异常
解析数据
JSON 不能存储 Date 对象。

如果你需要存储 Date 对象,需要将其转换为字符串。

之后再将字符串转换为 Date 对象。

实例

var text = '{ "name":"csdn", "initDate":"2013-12-14", "site":"www.csdn.com"}';
var obj = JSON.parse(text);
obj.initDate = new Date(obj.initDate);
 
document.getElementById("demo").innerHTML = obj.name + "创建日期: " + obj.initDate;

我们可以启用 JSON.parse 的第二个参数 reviver,一个转换结果的函数,对象的每个成员调用此函数。

实例

var text = '{ "name":"csdn", "initDate":"2013-12-14", "site":"www.csdn.com"}';
var obj = JSON.parse(text, function (key, value) {
    if (key == "initDate") {
        return new Date(value);
    } else {
        return value;
}});
 
document.getElementById("demo").innerHTML = obj.name + "创建日期:" + obj.initDate;

解析函数
JSON 不允许包含函数,但你可以将函数作为字符串存储,之后再将字符串转换为函数。

实例

var text = '{ "name":"csdn", "alexa":"function () {return 10000;}", "site":"www.csdn.com"}';
var obj = JSON.parse(text);
obj.alexa = eval("(" + obj.alexa + ")");
 
document.getElementById("demo").innerHTML = obj.name + " Alexa 排名:" + obj.alexa();

不建议在 JSON 中使用函数。

浏览器支持
主流浏览器都支持 JSON.parse() 函数:
在这里插入图片描述

旧版浏览器可以使用第三方库来支持:https://github.com/douglascrockford/JSON-js

JSON.stringify()

JSON 通常用于与服务端交换数据。

在向服务器发送数据时一般是字符串。

我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。

语法

JSON.stringify(value[, replacer[, space]])

参数说明:

  • value:
    必需, 要转换的 JavaScript 值(通常为对象或数组)。
  • replacer:
    可选。用于转换结果的函数或数组。
    如果 replacer 为函数,则 JSON.stringify将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回
    undefined,则排除成员。根对象的键是一个空字符串:“”。
    如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value参数也为数组时,将忽略 replacer 数组。
  • space:
    可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。

JavaScript 对象转换
例如我们向服务器发送以下数据:

var obj = { "name":"csdn", "alexa":10000, "site":"www.csdn.com"};

我们使用 JSON.stringify() 方法处理以上数据,将其转换为字符串:

var myJSON = JSON.stringify(obj);

myJSON 为字符串。

我们可以将 myJSON 发送到服务器:

实例

var obj = { "name":"csdn", "alexa":10000, "site":"www.csdn.com"};
var myJSON = JSON.stringify(obj);
document.getElementById("demo").innerHTML = myJSON;

JavaScript 数组转换
我们也可以将 JavaScript 数组转换为 JSON 字符串:

实例

var arr = [ "Google", "csdn", "Taobao", "Facebook" ];
var myJSON = JSON.stringify(arr);

myJSON 为字符串。

我们可以将 myJSON 发送到服务器:

实例

var arr = [ "Google", "csdn", "Taobao", "Facebook" ];
var myJSON = JSON.stringify(arr);
document.getElementById("demo").innerHTML = myJSON;

异常
解析数据
JSON 不能存储 Date 对象。

JSON.stringify() 会将所有日期转换为字符串。

实例

var obj = { "name":"csdn", "initDate":new Date(), "site":"www.csdn.com"};
var myJSON = JSON.stringify(obj);
document.getElementById("demo").innerHTML = myJSON;

之后你可以再将字符串转换为 Date 对象。

解析函数
JSON 不允许包含函数,JSON.stringify() 会删除 JavaScript 对象的函数,包括 key 和 value。

实例

var obj = { "name":"csdn", "alexa":function () {return 10000;}, "site":"www.csdn.com"};
var myJSON = JSON.stringify(obj);
 
document.getElementById("demo").innerHTML = myJSON;

我们可以在执行 JSON.stringify() 函数前将函数转换为字符串来避免以上问题的发生:

实例

var obj = { "name":"csdn", "alexa":function () {return 10000;}, "site":"www.csdn.com"};
obj.alexa = obj.alexa.toString();
var myJSON = JSON.stringify(obj);
 
document.getElementById("demo").innerHTML = myJSON;

不建议在 JSON 中使用函数。

浏览器支持
主流浏览器都支持 JSON.stringify() 函数:

  • Firefox 3.5
  • Internet Explorer 8
  • Chrome
  • Opera 10
  • Safari 4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Angular可视化指南 - 用Kendo UI图表组件创建数据可视化

Kendo UI for Angular是专业级的Angular UI组件库&#xff0c;不仅是将其他供应商提供的现有组件封装起来&#xff0c;telerik致力于提供纯粹高性能的Angular UI组件&#xff0c;而无需任何jQuery依赖关系。无论您是使用TypeScript还是JavaScript开发Angular应用程序&#xff0…

【机器学习(二)】线性回归之梯度下降法

文章目录专栏导读1、梯度下降法原理2、梯度下降法原理代码实现3、sklearn内置模块实现专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领域知识。 ✍ 本文录入于《数据分析之术》&#xff0c;本专栏精选了经典的机器…

1漏洞发现

漏洞发现-操作系统之漏洞探针类型利用修复 一、操作系统漏洞思维导图 相关名词解释&#xff1a; CVSS&#xff08;Common Vulnerability Scoring System&#xff0c;即“通用漏洞评分系统”&#xff09; CVSS是安全内容自动化协议&#xff08;SCAP&#xff09;的一部分通常C…

rockchip rk3588添加uvc及uvc,adb的复合设备

软硬件环境&#xff1a; 软件基础&#xff1a;我目前拿到的rk3588 sdk &#xff1a;gitwww.rockchip.com.cn:2222/Android_S/rk3588- manifests.git硬件基础&#xff1a;RK3588 LP4X EVB uvc_app: 从rv1126 sdk中rv1126_sdk/rv1126/external/uvc_app 目录移植而来。移植后&…

能翻译大量文字的软件-正规的翻译软件

复制自动翻译软件是一种能够复制并自动翻译文本的工具。当您阅读某一种语言的文本时&#xff0c;这种软件可以快速识别并翻译出来&#xff0c;以方便您更好地理解内容。与其他翻译软件不同的是&#xff0c;复制自动翻译软件可以直接在游览网站的过程中&#xff0c;直接对用户正…

【C++】命名空间,缺省参数,函数重载,引用,内联函数

目录1. 命名空间2. 输入输出3. 缺省参数4. 函数重载为什么C支持函数重载&#xff1f;5. 引用5.1 引用作函数参数&#xff08;输出型参数&#xff09;5.2 作函数的返回值关于函数的返回值&#xff1a;5.3 引用权限关于类型转换&#xff1a;5.4 引用和指针6. 内联函数6.1 C推荐的…

【千题案例】TypeScript获取两点之间的距离 | 中点 | 补点 | 向量 | 角度

我们在编写一些瞄准、绘制、擦除等功能函数时&#xff0c;经常会遇到计算两点之间的一些参数&#xff0c;那本篇文章就来讲一下两点之间的一系列参数计算。 目录 1️⃣ 两点之间的距离 ①实现原理 ②代码实现及结果 2️⃣两点之间的中点 ①实现原理 ②代码实现及结果 3…

JUC结构

JUC是java.util.concurrent包的简称在Java5.0添加&#xff0c;目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题&#xff01;进程与线程的区别&#xff1a;进程 : 一个运行中的程序的集合; 一个进程往往可以包含多个线程,至少包含一个线程…

count、sum、avg、max、min函数MySQL数据库 - 使用聚合函数查询(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴&#xff0c;并无盈利目的&#xff0c;尊重版权&#xff0c;如有侵犯&#xff0c;请官方工作人员联系博主谢谢。 目录 第1关&#xff1a;COUNT( )函数 任务描述 相关知识 COUNT()函数基本使用 编程要求 第2关&#xff1a;SUM(…

3.Java运算符

Java运算符 运算符基本分为六类&#xff1a;算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、三元&#xff08;条件&#xff09;运算符。 一、算术运算符 算数运算符&#xff0c;是指在Java运算中&#xff0c;计算数值类型的计算符号&#xff0c;既然是操作数值…

ubuntu下安装与配置samba

参考文章&#xff1a; https://blog.csdn.net/xurongxin2006/article/details/127740629 https://blog.csdn.net/weixin_42758707/article/details/129855529 https://www.linuxidc.com/Linux/2018-11/155466.htm https://blog.csdn.net/flyingcys/article/details/50673167 1、…

SGD,Adam,AdamW,LAMB优化器

一. SGD&#xff0c;Adam&#xff0c;AdamW&#xff0c;LAMB优化器 优化器是用来更新和计算影响模型训练和模型输出的网络参数&#xff0c;使其逼近或达到最优值&#xff0c;从而最小化(或最大化)损失函数。 1. SGD 随机梯度下降是最简单的优化器&#xff0c;它采用了简单的…

Qt音视频开发37-识别鼠标按下像素坐标

一、前言 在和视频交互过程中&#xff0c;用户一般需要在显示视频的通道上点击对应的区域&#xff0c;弹出对应的操作按钮&#xff0c;将当前点击的区域或者绘制的多边形区域坐标或者坐标点集合&#xff0c;发送出去&#xff0c;通知其他设备进行处理。比如识别到很多人脸&…

使用 gzip 压缩数据

gzip 是GNU/Linux平台下常用的压缩软件&#xff0c;处理后缀名.gz的文件。 gzip 、 gunzip 和 zcat 都可以处理这种格式的。但这些工具只能压缩/解压缩单个文件或数据流&#xff0c;无法直接归档目录和多个文件。但是&#xff0c; gzip 可以同tar 和 cpio 这类归档工具配合使用…

JavaWeb——网络的基本概念

目录 一、IP地址 1、定义 2、格式 &#xff08;1&#xff09;、A类地址 &#xff08;2&#xff09;、B类地址 &#xff08;3&#xff09;、C类地址 &#xff08;4&#xff09;、特殊地址 二、端口号 三、协议 四、协议分层 1、定义 2、分类 &#xff08;1&#xf…

pytorch进阶学习(六):如何对训练好的模型进行优化、验证并且对训练过程进行准确率、损失值等的可视化,新手友好超详细记录

课程资源&#xff1a; 7、模型验证与训练过程可视化【小学生都会的Pytorch】【提供源码】_哔哩哔哩_bilibili 推荐与上一节笔记搭配食用~&#xff1a; pytorch进阶学习&#xff08;五&#xff09;&#xff1a;神经网络迁移学习应用的保姆级详细介绍&#xff0c;如何将训练好…

给boss直聘的搜索结果加上hr活跃状态,少看点半年活跃的岗位,有书签版,油猴版

背景&#xff1a;这段时间找工作&#xff0c;无奈大环境不好&#xff0c;所在城市大部分公司都投了。就是没几个回复的&#xff0c;要么送达&#xff0c;要么已读不回&#xff0c;要么拿了简历没见邀约。然后boss为了争取我们多浏览网站&#xff0c;把一些陈年老醋也拿上台面&a…

企业云盘如何实现文件共享?

企业文件共享的方式有很多&#xff0c;最常见的就是使用第三方企业云盘工具进行文件实时共享&#xff0c;这种方法不仅方便安全&#xff0c;而且兼容性高。 企业云盘主要是通过建立企业内部共享文件夹进行文件分享&#xff0c;支持通过权限管控来保障文件的安全&#xff0c;管理…

SonarQube踩坑:本地利用maven进行代码SonarQube静态扫描

1、ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count SonarQube内置ElasticSearch内存不够 - 解决办法&#xff1a;修改内存配置大小 - 查询当前配置内存&#xff1a;sysctl -a | grep vm.max_map_count - 更改内存大小&#xff1a;sysctl …

SpringBoot集成Camunda流程引擎 (一)

一、匹配版本简介 首先官网camunda7.17对应的springboot版本。camunda官网 camunda中文手册:Camunda 中文站 | docs.camunda.org 使用camunda流程引擎、web界面、Rest服务接口相应依赖如下: 流程引擎:camunda-bpm-spring-boot-starterRest服务接口:camunda-bpm…