JSON详解

JSON(详解) JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它以易于阅读和编写的文本格式来存储和表示数据,通常用于在不同的系统之间进行数据交换。JSON数据以键-值对的形式组织,可以包含对象、数组、字符串、数字等基本数据类型。它经常在Web开发、API通信等领域被广泛使用。 阅读详情

一、概述

  • JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。
  • 采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

、

在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:

  • 对象表示为键值对,数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 键值对是用来保存 JavaScript 对象的一种方式,和 JavaScript 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值:

{"name": "SongQX"}
{"age": "3"}
{"sex": "男"}

很多人搞不清楚 JSON 和 JavaScript 对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:

JSON 是 JavaScript 对象的字符串表示法(因此,才能被前端的Vue和React解析),它使用文本表示一个 JS 对象的信息,本质是一个字符串。

<script type="text/javascript">
        var user = {    //写一个js对象
            name : "松崎乡",
            age : "20" ,
            sex : "男"
        }
        console.log(user) ;//{name: '松崎乡', age: '20', sex: '男'} //这是一个对象,注意键名也是可以使用引号包裹的

        //json是js对象的一种格式,所以可以将js对象转换为json格式
        var str =  JSON.stringify(user) ;
        console.log(str) ;   //{"name":"松崎乡","age":"20","sex":"男"}   //这是一个 JSON 字符串,本质是一个字符串

        var obj = JSON.parse(str) ; // 将字符串转换为JSON
        console.log(obj) ;  //{name: '松崎乡', age: '20', sex: '男'}

</script>

二、Controller返回JSON数据

Jackson应该是目前比较好的json解析工具了,用来将后台返回来的java对象转化为JSON字符串

我们这里使用Jackson,使用它需要导入它的jar包;

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.9.8</version>
</dependency>

配置好SpringMVC需要的环境 :

1、配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--1.注册servlet-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!-- 启动顺序,数字越小,启动越早 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--所有请求都会被springmvc拦截 -->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

2、配置springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.sqx.controller"/>
    <!-- 让Spring MVC不处理静态资源 -->
    <mvc:default-servlet-handler />
    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

3、配置pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>Json和Ajax笔记</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Json篇</artifactId>

    <dependencies>
        <!--spring 5.2-->
         <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.0</version>
        </dependency>
    </dependencies>
    
    <!--资源过滤-->
        <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

</project>

Controller测试

@Controller
public class JsonController {

    //一般情况下我们的请求会被视图解析器解析,返回结果,但是此处我们需要的时返回一个JSON格式的js对象
    //市面上很多第三方jar包可以实现,jackson、FastJson(阿里巴巴)
    //@ResponseBody  可以直接将服务器响应的对象转换为json格式返回!

    @RequestMapping("/json1")
    @ResponseBody
    public String json1() throws JsonProcessingException {
        System.out.println("成功进入请求");
        //需要一个Json的对象映射器,使用它可以直接将java对象转换为json格式的字符串
        ObjectMapper objectMapper = new ObjectMapper() ;
        User user = new User("松崎乡", 20, "男");
        String str = objectMapper.writeValueAsString(user);

        return str ;
    }
}

@Controller + @ResponseBody == @RestController

**测试结果: **

1、JSON数据出现乱码问题

发现结果乱码了{“name”:"???",“age”:20,“sex”:"?"},如何解决?

、

1、方法一

修改@RequestMapping即可

 @RequestMapping(value="/json2",produces = "application/json;charset=utf-8")

缺点:每次请求都需要设置,麻烦

2、方法二

乱码统一解决,在springmvc-servlet.xml中添加如下一段

<!--目的:让jackson自带编码失效,修改为我们自定义的uft-8-->
<mvc:annotation-driven>
   <mvc:message-converters register-defaults="true">
       <bean class="org.springframework.http.converter.StringHttpMessageConverter">
           <constructor-arg value="UTF-8"/>
       </bean>
       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
           <property name="objectMapper">
               <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                   <property name="failOnEmptyBeans" value="false"/>
               </bean>
           </property>
       </bean>
   </mvc:message-converters>
</mvc:annotation-driven>

如果我们json是返回的数组或集合我们可以用https://www.sojson.com/解析JSON的格式

2、时间格式问题

默认我们的mapper会将时间Date解析为一个时间戳,我们需要为其设置时间格式

  @RequestMapping(value="/time4")
    @ResponseBody
    public String json4() throws JsonProcessingException {

        //需要一个Json的对象映射器,使用它可以直接将java对象转换为json格式的字符串
        ObjectMapper objectMapper = new ObjectMapper() ;
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false) ; //关闭时间戳

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-SS");
        objectMapper.setDateFormat(simpleDateFormat);  // 为解析器设置时间规则

        Date date = new Date();  //默认返回的是时间戳
        String str = objectMapper.writeValueAsString(date);

        return str ;
    }

结果

三、编写工具类

我们发现代码复用太多,封装一个工具类

public class JsonUtils {
    
  	//使用默认时间戳
    public static String getJson(Object obj){
        //需要一个Json的对象映射器,使用它可以直接将java对象转换为json格式的字符串
        ObjectMapper objectMapper = new ObjectMapper() ;
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false) ; //关闭时间戳

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-SS");
        objectMapper.setDateFormat(simpleDateFormat);  // 为解析器设置时间规则

        String str = null;
        try {
            str = objectMapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return str ;
    }
	
    //自定义时间戳
    public static String getJson(Object obj,String sdf){
        //需要一个Json的对象映射器,使用它可以直接将java对象转换为json格式的字符串
        ObjectMapper objectMapper = new ObjectMapper() ;
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false) ; //关闭时间戳

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(sdf);
        objectMapper.setDateFormat(simpleDateFormat);  // 为解析器设置时间规则

        String str = null;
        try {
            str = objectMapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return str ;
    }
}

工具类测试

    @RequestMapping(value="/time5")
    @ResponseBody
    public String json5() throws JsonProcessingException {
        Date date = new Date();  //默认返回的是时间戳
        String str = JsonUtils.getJson(date);
        return str ;
    }

大功告成!完美!

JSON使用及解析详解 本文介绍了JSON格式及其C++解析技术。JSON作为一种轻量级数据交换格式,具有易读易写、跨语言等优势,已成为现代开发中的事实标准。文章对比了JSON与XML的特点及适用场景,重点讲解了C++中高效解析JSON的方法,特别是nlohmann/json库的使用技巧,包括安装配置、基本操作、性能优化和异常处理等。通过多个实战示例展示了从简单到复杂场景的JSON解析方案,并提供了自定义类型转换、内存管理等高级技巧。最后总结了JSON解析的最佳实践和常见问题解决方案,帮助开发者在不同场景下选择最优的JSON处理方 阅读详情

相关推荐

Python json库【处理JSON数据】使用详解

继承。

记录点滴 1098

JSON百科全书:学习JSON看这一篇就够了

JSON 对象包含两个方法:用于解析 JavaScript Object Notation(JSON)的 parse() 方法,以及将对象/值转换为 JSON 字符串的 stringify() 方法。除了这两个方法,JSON 这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用。

青春木鱼的博客 3万+

【AAAI 2025】轻量级特征增强新范式!FCM 模块助力小目标检测,即插即用提升模型泛化能力

本文介绍了AAAI 2025提出的轻量级特征增强新范式FCM模块,它通过显式分离并双向交互语义与空间特征,有效解决了小目标检测中特征信息失配的核心难题。该模块设计精巧,计算开销极低,能够即插即用式地嵌入YOLO等主流检测网络,显著提升模型对小目标的泛化检测能力,尤其适用于遥感、自动驾驶等对计算资源敏感的实际场景。

weixin_29056145的博客 287

JSON简介

JSON是一种轻量级的数据交换格式,它基于JavaScript中的一个子集定义。JSON是JavaScript Object Notation的缩写,但它是语言无关的,这意味着JSON可以在任何编程语言中使用,不仅限于JavaScript。1、映射用冒号(“:”)表示。名称:值2、并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值23、 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}4、并列数据的集合(数组)用方括号(“[]”)表示。

weixin_72280926的博客 1万+

高通CamX架构解析(一)——核心组件与数据流设计

本文深入解析高通CamX相机架构的核心组件与数据流设计。CamX采用模块化与数据驱动思想,将复杂处理流程拆解为Node、Pipeline、Session等独立组件,并通过CHI层实现硬件接口与定制功能的分离。文章详细阐述了从请求下发到结果返回的完整数据流,并提供了实用的调试与分析指南,帮助开发者理解这一高效、灵活的现代相机架构。

k8l9m0n的博客 235

ROS2_IGH方案配置(二)——Ubuntu22.04 实时内核性能验证与调优

本文详细介绍了在Ubuntu22.04系统上配置ROS2_IGH方案时,如何验证和调优PREEMPT_RT实时内核性能。通过使用cyclictest工具进行基准测试和压力测试,分析中断与硬件延迟,并优化内核参数,确保系统满足工业控制领域对硬实时性的苛刻要求。文章还提供了针对ROS2的特殊优化建议和性能监控方案,帮助开发者实现毫秒级延迟的稳定控制。

weixin_30791095的博客 224

JSON 格式详解

JSON 是一种基于文本的数据交换格式,源于 JavaScript 语言,但其设计目的是独立于语言的。目前,几乎所有主流编程语言都支持 JSON,常用于数据存储和网络传输。以下是B站尚硅谷javaweb课程老师的图解:尚硅谷Javaweb教程JSON 的结构由两种基本数据结构组成:对象(object)和数组(array)。对象是键值对的集合,而数组是有序的值集合。JSON 作为一种轻量级的数据交换格式,凭借其简洁、易于解析等特点,已经成为了 Web 开发中的事实标准。

Huazzi的博客 2万+

详解一典型的反激式开关电源方案

如图,在某系统方案上看到下图所示的单端反激式开关电源方案。

alala120的博客 1万+

python json详解

Python 的 json 模块提供了强大的功能来处理 JSON 数据。通过 json.dump() 和 json.dumps(),你可以将 Python 对象序列化为 JSON 格式;通过 json.load() 和 json.loads(),你可以将 JSON 数据反序列化为 Python 对象。利用这些功能,你可以轻松地在 Python 程序中处理 JSON 数据。

stephenbruce的博客 1257

跟着团子学SAP PS:BOM和项目结构的联动-BOM Transfer CN33

关于项目中的物料组件挂接你需要了解的一点功能

Lucas1211的博客 2万+

人形机器人硬件电路设计入门

人形机器人属于。

blotemj.blog.youkuaiyun.com 230

JSON 详解

JSON 详解 JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式。 文章目录JSON 详解一、JSON基本语法二、JSON序列化JSON序列化方法三、Stringify方法replacer参数四、parse方法五、使用JSON序列化深拷贝 一、JSON基本语法 JSON的顶层支持三种类型的值: 简单值:数字(Number)、字符串(String,不支持单引号)、布尔类型(Boolean)、null类型; 对象值:由key、value组成,key是字符串类型

前端学习博客 2万+

074.多任务学习:在YOLO基础上同时进行分割、关键点检测

本文探讨了在YOLOv5模型中实现检测、分割和关键点多任务的技术方案。通过分层特征抽取策略(检测用深层、分割用浅深融合、关键点用中层)解决特征共享问题;采用不确定性加权方法自动平衡多任务损失;设计了支持三种标签的数据流处理方式;并分享了推理部署时的后处理技巧。实践表明,合理的多任务设计可以提升主任务性能,但需权衡标注成本和推理效率。最终方案选择在训练时引入分割作为辅助任务,推理时仅保留检测和关键点,实现了检测mAP提升2.3%的优化效果。

2603_95664987的博客 45

Python 的Json库用法详解

1.dumps() 方法:将 Python 对象编码成 JSON 字符串。 json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=Fals...

xiaoyu_wu的博客 2458

【滚雪球学数学建模】第1节·建模入门+三步法+案例

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 6413

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Json详解

点击打开链接 Json详解

阿鸥饿了 523

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

json_decode详解

json_decode详解1.json_decode() 1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $assoc ] ) 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 参数 json 待解码的 json string 格式的字符串。 assoc

RSFeegg的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python中json对象及json.losd()详解

JSON(JavaScript Object Notation) 一种轻量级的数据交换格式,易于阅读与编写。 是数据交换格式,但不是数据类型,其对应在Python中的数据类型是list。 json在python中是一种对象。 import json模块导入 json.dumps()用于将python对象编码成json字符串。(返回值的数据类型是str) json.dumps(obj, ...

漫步量化 615

JSON Schema 示例详解(基于 Draft 2020-12)

通过上述示例和解释,我们深入了解了如何使用Draft 2020-12规范来创建复杂且详细的JSON Schema。这不仅有助于确保数据的一致性和正确性,还能提高API和服务间交互的安全性和可靠性。希望这份指南能帮助您更好地理解和应用JSON Schema。JSON Schema是一种用于描述和验证JSON数据结构的强大工具。规范,提供一个详尽的JSON Schema示例,并深入讲解其中涉及的各种属性和特性。值得注意的是,除了字符串类型外,数值类型并不直接支持正则表达式或类似的模式匹配方式。

小单的博客专栏 1771
上一篇: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
下一篇: Springboot集成七牛云,实现图片上传功能
Today不上发条
Today不上发条 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 5737粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Today不上发条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值