Map和List输入的两种不同json格式

一、List to json格式

[{"@type":"top.lovemom.pojo.ESP8266","devicePosition":"家里的阳台","deviceRemark":"我的设备1","publicIp":"127.0.0.1","userEmail":"123b@ggb.top"},{"@type":"top.lovemom.pojo.HardwareLED","stateCurrentLED":1,"statusControlLED":0,"timeCurrentLED":"2024-03-31 15:48:53"}]

1.1 list解析呈现

1.2 list json 生成 源码

package top.lovemom.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

import top.lovemom.pojo.ESP8266;
import top.lovemom.pojo.HardwareLED;

/**
 * Servlet implementation class TestServlet
 */
@WebServlet("/BW29y82UI")
public class GetContextServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public GetContextServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String ip = request.getRemoteAddr();
		System.out.println("————"+ip+"————实现get请求");
		
		ESP8266 esp = new ESP8266();
		esp.setPublicIp(ip);
		esp.setUserEmail("123b@ggb.top");
		esp.setDeviceRemark("我的设备1");
		esp.setDevicePosition("家里的阳台");
		
		Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = sdf.format(now);	
		
		HardwareLED led = new HardwareLED();
		led.setStateCurrentLED(1);
		led.setTimeCurrentLED(formattedDate);
		
		// 创建一个 List 对象来存储 ESP8266 和 HardwareLED 对象
		List<Object> objectList = new ArrayList<>();
		// 将 ESP8266 和 HardwareLED 对象添加到 List 中
        objectList.add(esp);
        objectList.add(led);
		
        // 将 List 对象转换为 JSON 字符串
        String respondJson = JSON.toJSONString(objectList, SerializerFeature.WriteClassName);
		
		// 设置响应的内容类型为application/json
	    response.setContentType("application/json");
	    response.setCharacterEncoding("UTF-8");
	    // 获取响应的输出流
	    PrintWriter out = response.getWriter();
	    // 将JSON字符串写回客户端
	    out.println(respondJson);
	    out.flush();
		
	}

}

二、Map to json格式

{"top.lovemom.pojo.ESP8266":{"devicePosition":"家里的阳台","deviceRemark":"我的设备1","publicIp":"127.0.0.1","userEmail":"123b@ggb.top"},"top.lovemom.pojo.HardwareLED":{"stateCurrentLED":1,"statusControlLED":0,"timeCurrentLED":"2024-03-31 15:58:50"}}

2.1 map解析呈现

2.2 map json 生成 源码

package top.lovemom.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;

import top.lovemom.pojo.ESP8266;
import top.lovemom.pojo.HardwareLED;

@WebServlet("/BW29y82UI")
public class GetContextServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public GetContextServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String ip = request.getRemoteAddr();
        System.out.println("————" + ip + "————实现get请求");

        ESP8266 esp = new ESP8266();
        esp.setPublicIp(ip);
        esp.setUserEmail("123b@ggb.top");
        esp.setDeviceRemark("我的设备1");
        esp.setDevicePosition("家里的阳台");

        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = sdf.format(now);

        HardwareLED led = new HardwareLED();
        led.setStateCurrentLED(1);
        led.setTimeCurrentLED(formattedDate);

        // 创建一个 Map 对象来存储 ESP8266 和 HardwareLED 对象
        Map<String, Object> jsonObject = new LinkedHashMap<>();
        // 将 ESP8266 和 HardwareLED 对象添加到 Map 中
        jsonObject.put(esp.getClass().getName(), esp);
        jsonObject.put(led.getClass().getName(), led);

        // 将 Map 对象转换为 JSON 字符串
        String respondJson = JSON.toJSONString(jsonObject);

        // 设置响应的内容类型为application/json
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        // 获取响应的输出流
        PrintWriter out = response.getWriter();
        // 将JSON字符串写回客户端
        out.println(respondJson);
        out.flush();
    }
}

三、说明

在Java中,List和Map是两种不同的数据结构,它们在生成JSON格式数据时可以产生不同的输出。

  1. List生成JSON格式

    • 当使用List存储对象时,通常会将对象按顺序存储在List中。在将List转换为JSON格式时,对象的顺序会被保留,JSON数组中的元素顺序与List中的顺序一致。这意味着在前端处理JSON数据时,可以根据元素在数组中的位置来访问和操作数据。
    • 例如,在你的代码中,你将ESP8266和HardwareLED对象存储在List中,然后将List转换为JSON格式,输出的JSON数组中的元素顺序与List中的顺序一致。
  2. Map生成JSON格式

    • 使用Map时,可以使用键值对的方式存储数据。在将Map转换为JSON格式时,键值对会被转换为JSON对象的属性和值。键值对在JSON对象中没有固定的顺序,它们的顺序不影响JSON对象的解析和处理。
    • 例如,在修改后的代码中,你创建了一个Map对象来存储ESP8266和HardwareLED对象,然后将Map转换为JSON格式,输出的JSON对象中的属性顺序不受影响,因为JSON对象中的属性顺序在规范中并不重要。

通常情况下属性用List、对象用Map

JSON格式对前后端分离的重要性

JSON格式在前后端分离架构中扮演了重要角色,具有以下几个方面的重要性:

  1. 数据交换标准:JSON作为一种轻量级的数据交换格式,被广泛应用于前后端数据传输中。前端通过HTTP请求从后端获取JSON格式的数据,然后可以使用JavaScript轻松地解析和处理这些数据。

  2. 灵活性和可读性:JSON具有简洁清晰的结构,易于阅读和理解。它支持复杂的数据结构,包括嵌套对象和数组,使得可以传输各种类型的数据。

  3. 跨语言支持:JSON是一种语言无关的数据格式,几乎所有编程语言都有对JSON的解析和生成支持。这意味着可以在不同的技术栈之间轻松地传递数据,实现跨平台的数据交换。

  4. 前后端分离:JSON格式的广泛应用促进了前后端分离架构的发展。通过将数据和界面逻辑分离,前端工程师可以专注于前端界面的开发和优化,而后端工程师则可以专注于数据处理和业务逻辑的实现。这种分离提高了开发效率和代码的可维护性。

因此,JSON格式在前后端分离架构中扮演了至关重要的角色,它提供了一种简单、灵活、跨平台的数据交换方式,促进了前后端的协作和开发效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Verilog基础【一】

文章目录 1.1 第一个verilog设计1.2 Verilog 简介1.3 Verilog环境搭建1.4 Verilog 设计方法设计方法设计流程 2.1 Verilog 基础语法格式注释标识符与关键字 2.2 Verilog 数值表示数值种类整数数值表示方法实数表示方法十进制&#xff1a;科学计数法&#xff1a; 字符串表示方法…

【论文极速读】 指令微调BLIP:一种对指令微调敏感的Q-Former设计

【论文极速读】 指令微调BLIP&#xff1a;一种对指令微调敏感的Q-Former设计 FesianXu 20240330 at Tencent WeChat search team 前言 之前笔者在[1]中曾经介绍过BLIP2&#xff0c;其采用Q-Former的方式融合了多模态视觉信息和LLM&#xff0c;本文作者想要简单介绍一个在BLIP2…

java多数据源几种实现方式以及demo

提示&#xff1a;多数据源实现方式、多数据源的使用场景。AbstractRoutingDataSource、DynamicDataSource框架、mybatisplus的Intercepter插件、java中多数据源的几种实现方式、mybatisPlus的插件实现多数据源 文章目录 前言一、多数据源的几种实现方式二、使用场景三、核心原理…

k8s1.28.8版本配置Alertmanager报警方式(邮件,企业微信)

文章目录 总结部署流程 Alertmanager 三大核心1. 分组告警2. 告警抑制3. 告警静默 报警过滤静默通知方案一&#xff1a;方案二&#xff1a; 抑制报警规则案例一 参考文档 自定义路由告警&#xff0c;分来自不同路由的告警&#xff0c;艾特不同的人员进行区分修改 alertmanager …

中缀转后缀表达式

思路分析 遇到数字&#xff0c;直接输出遇到符号 栈为空&#xff0c;符号直接入栈若为 ( &#xff0c;则直接入栈用当前符号和栈顶符号比较优先级 当前符号 > 栈顶符号&#xff0c;当前符号直接入栈&#xff0c;结束当前符号 < 栈顶符号,栈顶符号出栈并输出&#xff0c;…

verilog中的testbench语句——display,fopen,fread,fwrite——更新中

一、fopen bmp_file_read $fopen("../pic/picture.bmp","rb"); 要注意这类操作文件的函数&#xff0c;在vivado2018自带的仿真软件里&#xff0c;不综合直接仿真&#xff0c;它的当前文件夹如图所示。 一、fwrite $fwrite(bmp_file_write,"%c"…

【Effective Web】页面优化

页面优化 页面渲染流程 JavaScript 》 Style 》 Layout 》 Paint 》 Composite 首先js做了一些逻辑&#xff0c;触发了样式变化&#xff0c;style计算好这些变化后&#xff0c;把影响的dom元素进行重新布局&#xff08;layout&#xff09;,再画到画布中&#xff08;Paint&am…

【数据结构与算法】二叉树遍历、判断和 diff 算法

遍历 深度优先遍历 function Node(value) {this.value valuethis.left nullthis.right null }let a new Node(a) let b new Node(b) let c new Node(c) let d new Node(d) let e new Node(e) let f new Node(f) let g new Node(g) a.left c a.right b c.l…

如何提升公众号搜索量?分享内部运营的5步优化技术!

最近一直有自媒体同行朋友在写关于公众号的内容&#xff0c;很多都说公众号现在没得玩了。其实&#xff0c;在运营自媒体上面&#xff0c;思维不通&#xff0c;技术不到位&#xff0c;哪个平台都不适合你玩。 想要在自媒体上面运营变现&#xff0c;一定不要先点击广告变现&…

【二分查找】查找数列中数第一次出现的编号

一道巩固二分查找知识的题&#xff0c;非常简单&#xff0c;一起做一下吧 题目&#xff1a; 答案&#xff1a; #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N1000010;int n,m; int q[N];bool isBlue(int num…

7种2024年算法优化BP,实现回归,单/多变量输入,单/多步预测功能,机器学习预测全家桶再更新!...

截止到本期MATLAB机器学习预测全家桶&#xff0c;一共发了19篇关于机器学习预测代码的文章。算上这一篇&#xff0c;一共20篇&#xff01;参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测…

中文乱码 一文讲解 字符集和字符编码 不再困惑(有源码)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 这可能是应用级程序员最困惑的…

SSTI 服务器端模板注入(Server-Side Template Injection)

1.Web_python_template_injection {{}}是变量包裹标识符&#xff0c;里面存放的是一个变量&#xff0c;当你输入 http://61.147.171.105:55121/{{8*8}} 执行成功&#xff0c;说明存在模版注入。接下来&#xff0c;开始想办法编代码拿到服务器的控制台权限 。 首先&#xff0c…

Redis 命令行客户端

目 录 redis 客户端介绍 redis 客户端介绍 redis 是一个 客户端-服务器 结构的程序&#xff01;&#xff01;&#xff08;类似于 MySQL&#xff09; 因此 redis 客户端和服务器 可以在同一个主机上&#xff0c;也可以在不同主机上. Redis 的客户端也有很多种形态&#xff1a;…

2024 批量下载吾爱破解公众号文章内容/话题/图片/封面/视频/音频,导出文章pdf合集,excel数据包含阅读数留言数粉丝数

前几天看到吾爱破解论坛公众号文章吾爱破解精华集2023&#xff0c;于是把吾爱破解论坛公众号2022-2023年所有公众号文章也下载做成合集分享给大家&#xff0c;网盘地址https://pan.quark.cn/s/9c1b60b822a7 下载的excel文章数据包含文章日期&#xff0c;文章标题&#xff0c;文…

基于springboot实现图书个性化推荐系统项目【项目源码+论文说明】

基于springboot实现图书个性化推荐系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

risc-v向量扩展strlen方法学习

riscv向量文档中给出了strlen的实现&#xff0c; 大概是这么一个思路&#xff0c; 加载向量: 使用向量加载指令&#xff08;如 vload&#xff09;从内存中加载一个向量长度的字符。比较向量与零: 使用向量比较指令&#xff08;如 vmask 或 vcmpeq&#xff09;来检查向量中的每…

Js之运算符与表达式

运算符&#xff1a;也叫操作符&#xff0c;是一种符号。通过运算符可以对一个或多个值进行运算&#xff0c;并获取运算结果。 表达式&#xff1a;由数字、运算符、变量的组合&#xff08;组成的式子&#xff09;。 表达式最终都会有一个运算结果&#xff0c;我们将这个结果称…

【电路笔记】-快速了解数字逻辑门

快速了解数字逻辑门 文章目录 快速了解数字逻辑门1、概述2、集成电路的分类3、摩尔定律4、数字逻辑状态5、数字逻辑噪声6、简单的基本数字逻辑门7、基本 TTL 逻辑门8、发射极耦合数字逻辑门9、集成电路的“74”子族10、基本 CMOS 数字逻辑门数字逻辑门是一种电子电路,它根据其…

C++从入门到精通——引用()

C的引用 前言一、C引用概念二、引用特性交换指针引用 三、常引用保证值不变权限的方法权限的放大权限的缩小权限的平移类型转换临时变量 四、引用的使用场景1. 做参数2. 做返回值 五、传值、传引用效率比较值和引用的作为返回值类型的性能比较 六、引用和指针的区别引用和指针的…