JSON简介及前端简单解析(一)

简介: JSON简介及前端简单解析(一)

一  JSON的简单概述


JSON,全称是JavaScript Object Natotion(JavaScript 对象表示法),是存储和交换文本信息的语法。与XML类似。但JSON 比 XML 更小、更快,更易解析。是轻量级的,且具有自我描述性,更好地理解。


JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。


JSON从描述上看,是Java Script对象的表示法,所以与Java Script有非常密切的联系。JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。


JSON文件的后缀名是.json, MIME类型为: application/json。


MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。


二   JSON与XML的区别


二.一  与 XML 相同之处

  • JSON 是纯文本
  • JSON 具有"自我描述性"(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输


二.二  与 XML 不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字


二.三   Ajax方面具体说明

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML (在数据消息交互方面,用XML过多)


  • 读取 XML 文档
  • 使用 XML DOM 来循环遍历文档
  • 读取值并存储在变量中


使用 JSON (在数据传递方面,特别是前后台数据交互方面)


  • 读取 JSON 字符串
  • 用 eval() 处理 JSON 字符串

三   JSON的单值处理 (均用JSP讲解,故要创建一个Web动态工程(eclipse))


JSON的单值处理方式很简单, 就是简单的{key:value}  形式,且只有这一个。 用{} 进行括起来。相当于key=value形式。


其中key值表示的是key,value表示的是值。 类似于Map键值对的方式。 其中value可以取值的类型有:

image.png



有字符串类型,数字类型,布尔类型(true,false),null 和对象类型,数组类型,(下面会单独讲,意思是可以互相嵌套)。


三.一  数字类型

在index.jsp页面中,创建一个简单的JSON的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="jquery-3.1.0.min.js"></script>
<title>两个蝴蝶飞对JSON的不深入了解</title>
<script>
  $(function(){
  //写具体的操作
  })
</script>
</head>
<body>
  <h2>关于JSON的学习</h2>
  <div id="myjson">
  <span id="single"></span>
  <span id="name"></span>
  <span id="age"></span>
  <span id="sex"></span>
  </div>
</body>
</html>


1.单数字时:

//定义成json对象,用{} 拓起来
  var obj={"age":23};
  $("#age").text(obj.age);

image.png

2.也可以将23用双引号括起来,即

var obj={"age":"23"};
  $("#age").text(obj.age);


但这个时候,表示的是字符串23,并不是数字23.


3.也可以将age不括起来,即

var obj={age:"23"};
  $("#age").text(obj.age);


4. {"age":23} 相当于为age=23。


5. 至于修改和删除,添加等操作,用下面的对象来解释。这里暂时不解释了。


三.二  字符串类型

//定义成json对象,用{} 拓起来
  var obj={"name":"两个蝴蝶飞"};
  $("#name").text(obj.name);

image.png

2. 如果将后面的字符串值去掉"" ,即

var obj={"name":两个蝴蝶飞};
  $("#name").text(obj.name);


这样会报错的,页面上也不会显示出值。 所以,如果value是非数字类型,那么应该用"" 括起来。


不要以为没有弹出框就不是报错,用F12打开开发者模式看一下

image.png


3. 现在取出的值是obj.name, 如果写错了,即写成obj.age, 并不存在的值,

var obj={"name":"两个蝴蝶飞"};
  $("#name").text(obj.age);


页面上不会报错,但什么东西都不会显示的

三.三   布尔类型值 true,false

var obj={"sex":true};
  if(obj.sex){
    console.log("性别是男");
  }else{
    console.log("性别是女");
  }


里面的true为布尔类型值,刷新页面,控制台输出:


image.png


可以取出值来直接放在if中进行判断。


2. 有的说,将true 变成"false", 是字符串类型的,为什么还打印输出呢?

//定义成json对象,用{} 拓起来
  var obj={"sex":"false"};
  if(obj.sex){
    console.log("性别是男");
  }else{
    console.log("性别是女");
  }


这个时候,输出的是

image.png


性别也是男,并不是女。  因为这个时候,false为字符串值。 obj.sex时,取出的是字符串类型的false。 所以仍然打印性别是男。 (js判断if条件为false的情况:

逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么if判断 false ,其他为true 
)


字符串类型的false,与布尔类型的false,并不一样。

var obj={"sex":"false"};
  console.log(typeof(obj.sex));

image.png


上面的例子也就是: (以下均不截图了)

if("false"){
    console.log("性别是男"); //输出为男
  }else{
    console.log("性别是女");
  }


3. 如果想让其判断为女,那么就需要用字符串去判断条件了。 (以下均不截图了)

//定义成json对象,用{} 拓起来
  var obj={"sex":"false"};
  console.log(typeof(obj.sex));
  if(obj.sex!="false"){
    console.log("性别是男");
  }else{
    console.log("性别是女"); //输出性别是女
  }


三.四   值为null

//定义成json对象,用{} 拓起来
  var obj={"money":null};
  console.log("类型是:"+typeof(obj.money));  //object
  console.log(obj.money); //null, 并不是什么都不显示
  if(obj.money){
    console.log("有钱");
  }else{
    console.log("没有钱"); //null为false, 显示为没有钱
  }


四   值为单个对象 {} (即Java 中JavaBean形式)


上面只有一个属性,很难表示一个对象的完整信息,也是无法表示出来的。 故可以在{} 封装多个对象。 单个值表示也是用:进行分隔,但值与值之间用,进行分隔。


image.png

//定义成json对象,用{} 拓起来
  var obj={"name":"两个蝴蝶飞","age":24,"sex":"男"};
  console.log("类型:"+typeof(obj));  //为object
  $("#name").text(obj.name);
  $("#age").text(obj.age);
  $("#sex").text(obj.sex);

image.png

在取值的时候,只要相应的.key就行了。


四.二   有人说,会见过这种模式,

var obj={"person":{"name":"两个蝴蝶飞","age":24,"sex":"男"}};


即现在后面的value值,并不是单纯的一个数字,而是一个对象。 这种表示实际上三.四  两种方式的结合使用。{"person":value},


value是一个单个对象。


这个时候取值只要将前面的person带上即可。 先找到对应的key(person), 找到Key之后,继续找里面的key。 嵌套使用

//定义成json对象,用{} 拓起来
  var obj={"person":{"name":"两个蝴蝶飞","age":24,"sex":"男"}};
  console.log("类型:"+typeof(obj));  //为object
  $("#name").text(obj.person.name); //正常取的方式,这种才会显示(采用)
  $("#age").text(obj.person.money); //没有money值,不出错,但也不会显示
  $("#sex").text(obj.sex);//是找不到男这个值 的。不出错,也不会显示

image.png

四.三  添加对象属性

var obj={"name":"两个蝴蝶飞","age":24,"sex":"男"};
  console.log("类型:"+typeof(obj));
  //添加一个对象属性为money
  obj.money="新添加的money属性";
  $("#name").text(obj.money); //取出的值为:新添加的money属性
  $("#age").text(obj.age);
  $("#sex").text(obj.sex);


让JSON对象新.一个要添加的属性即可。 即obj.name="要添加的值";


所以有的时候,如果添加的层次较多的话,可以这样添加.

var obj={};
  obj.name="两个蝴蝶飞";
  obj.age=24;
  obj.sex="男";
  $("#name").text(obj.name);
  $("#age").text(obj.age);
  $("#sex").text(obj.sex);

 

四.四  修改对象属性

//定义成json对象,用{} 拓起来
  var obj={"name":"两个蝴蝶飞","age":24,"sex":"男"};
  console.log("类型:"+typeof(obj));
  //修改名称的值  直接用=号
  obj.name="两个蝴蝶飞啊飞啊";  
  $("#name").text(obj.name);  //取出的值为:两个蝴蝶飞啊飞啊
  $("#age").text(obj.age);
  $("#sex").text(obj.sex);


修改对象用取出的值="新值"; 即可。


要改变的值存在的话,为修改。 不存在的话, 为添加。


四.五  删除对象属性

//定义成json对象,用{} 拓起来
  var obj={"name":"两个蝴蝶飞","age":24,"sex":"男"};
  console.log("类型:"+typeof(obj));
  //删除一个属性
  delete obj.age;
  $("#name").text(obj.name);
  $("#age").text(obj.age); // 被删除了,无法取出
  $("#sex").text(obj.sex);


这个时候,就会删除掉age这个属性。

如果是:

//删除obj
  delete obj;


这个时候,是并不会删除的obj对象的。 obj.name,obj.age,obj.sex是依旧可以取出的。只能 delete 对象.属性。


五   数组对象 Array  用[  ]括起来,用索引取出值


简单来说,常见的数组对象可以分为两种,第一种,是单值的情况。第二种,是对象情况。


image.png


五.一  单值数组

1. 放置同一种类型的

var obj=[12,24,36,48];


取出值时,用索引下标进行取出。

//定义成json数组对象,用[]拓起来
  var obj=[12,24,36,48];
  console.log(obj[0]); //12
  console.log(obj[obj.length-1]); //48
  console.log(obj[obj.length]);//undefined


2 .其中,放置的值可以为同一个类型的,也可以为不同的类型的。

//定义成json数组对象,用[]拓起来
  var obj=["两个蝴蝶飞",24,false,true,null,"男"];
  console.log(obj[0]); //两个蝴蝶飞
  console.log(obj[obj.length-1]);//男
  console.log(obj[obj.length]);//undefined


这里面的值有字符串,数字,布尔值,还有null。


3. 也可以放置对象类型

//定义成json数组对象,用[]拓起来
  var obj=["两个蝴蝶飞",24,false,true,null,{'name':'两个蝴蝶飞','age':24,'sex':'男'}];
  console.log(obj[0]);//两个蝴蝶飞
  console.log(obj[obj.length-1].name);//两个蝴蝶飞
  console.log(obj[obj.length-1].age);//24

image.png

五.二  对象数组

里面的值放置多个对象,是第一种单值的变形体。很常用的一种方式 (即Java 中List<JavaBean> 形式)


当然里面也可以进行嵌套,但这里只是简单的形式。

var obj = [
    {'name':'慧芳','age':28,'sex':'女'}, 
    {'name':'莉莉','age':26,'sex':'女'}, 
    {'name':'两个蝴蝶飞','age':24,'sex':'男'}
  ];


一般常见写成key:value 形式,即将array写成value形式

var obj = {"persons":
    [{'name':'慧芳','age':28,'sex':'女'}, 
    {'name':'莉莉','age':26,'sex':'女'}, 
    {'name':'两个蝴蝶飞','age':24,'sex':'男'}]
  };

五.三  对象数组的输出

第一种形式输出:

// 第一种形式
  for(var i=0;i<obj.persons.length;i++){
    // 不要写成 var p=obj.persons[i], 然后p.name (这是错误的)
    console.log(obj.persons[i].name);
    console.log(obj.persons[i].age);
    console.log(obj.persons[i].sex);
  }


第二种形式输出:

// 第二种形式
  for(var p in obj.persons){
    //都是先取出obj.persons[p]
    console.log(obj.persons[p].name);
    console.log(obj.persons[p].age);
    console.log(obj.persons[p].sex);
  }


3. 上面是JSON常见的两种形式输出,当成Jquery进行整合之后,可以用Jquery的循环遍历进行输出

// 第三种形式, each形式循环遍历输出       
$.each(obj.persons,function(n,value){
    console.log(value.name);
    console.log(value.age);
    console.log(value.sex);
  })

六  JSON形式字符串复杂格式


json对象之间可以相互的嵌套,可以对象与数组嵌套,也可以对象与单值嵌套,也可以单值与数组进行嵌套。


有时候,嵌套的时候很容易出错。 可以利用工具进行相应的解析和验证。


推荐菜鸟教程的工具: https://c.runoob.com/front-end/53


和:  http://www.bejson.com/


在解析的时候,也要慢慢的进行相应的解析,层层进行解析。


七   JSON对象与JSON字符串之间相互转换


七.一   JSON对象转换成JSON字符串

1.  var result=JSON.stringify(obj);


七.二      JSON字符串转换成JSON对象

1. var obj= JSON.parse(result)


2.   var obj= $.parseJSON(result)


3.   var obj=eval('(' + result + ')');


在解析和遍历时,要注意嵌套的顺序。

相关文章
|
6月前
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
8月前
|
存储 JSON 关系型数据库
【干货满满】解密 API 数据解析:从 JSON 到数据库存储的完整流程
本文详解电商API开发中JSON数据解析与数据库存储的全流程,涵盖数据提取、清洗、转换及优化策略,结合Python实战代码与主流数据库方案,助开发者构建高效、可靠的数据处理管道。
|
7月前
|
JSON 算法 API
淘宝商品评论API接口核心解析,json数据返回
淘宝商品评论API是淘宝开放平台提供的数据服务接口,允许开发者通过编程方式获取指定商品的用户评价数据,包括文字、图片、视频评论及评分等。其核心价值在于:
|
5月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
398 4
|
5月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
605 0
|
9月前
|
JSON 定位技术 PHP
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
275 67
|
6月前
|
JSON 自然语言处理 API
多语言实时数据淘宝商品评论API:技术实现与JSON数据解析指南
淘宝商品评论多语言实时采集需结合官方API与后处理技术实现。建议优先通过地域站点适配获取本地化评论,辅以机器翻译完成多语言转换。在合规前提下,企业可构建多语言评论数据库,支撑全球化市场分析与产品优化。
|
11月前
|
存储 前端开发 JavaScript
调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
3359 64
|
数据采集 JSON 数据可视化
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
728 4
JSON数据解析实战:从嵌套结构到结构化表格
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    877
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    402
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    305
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    273
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    399
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    582
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    613
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    187
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    530
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    344
  • 推荐镜像

    更多
  • DNS