【第三方JSON库】org.json.simple用法初探—Java编程【Eclipse平台】【不使用项目管理工具】【不添加依赖解析】

本文将重点介绍,在不使用项目管理工具,不添加依赖解析情况下,【第三方库】JSON.simple库在Java编程的应用。

JSON.simple是一种由纯java开发的开源JSON库,包含在JSON.simple.jar中。它提供了一种简单的方式来处理JSON数据和以JSON格式输出数据。使用JSON.simple,你可以轻松地将JSON数据转换为Java对象或将Java对象转换为JSON格式。

JSON.simple库中包含的主要类有JSONObject和JSONArray。JSONObject类表示JSON对象,JSONArray类表示JSON数组。它们提供了一系列方法来操作JSON数据。

JSON.simple的功能:

  • 完全兼容JSON的标准(RFC4627)
  • 提供了多个功能,如编码和解码JSON格式数据;
  • 使用轻量级的库来解码/解析和转换JSON数据信息
  • 灵活,简单,而且容易被Map和List接口重用;
  • 支持流式的JSON文本输出;
  • 提供了对于JSON文本流式输入的可停止的SAX-like接口基于解析器的头;
  • 高性能,而且还不依赖其它的库;
  • 所有的代码和执行文件都可和JDK兼容

在这里插入图片描述
说明:
JSONObject是Java.util.HashMap的子类,不提供排序。
如果你需要强制对元素进行排序,可以使用JSONValue.toJSONString(map)方法来实现。

在解码或解析时,JSON.simple的映射是从中间映射到右边;
在编码时,映射关系是从右边到中间。

在解码时,
默认具体的java.util.List类对应的是 org.json.simple.JSONArray;
默认具体的java.util.Map类对应的是 org.json.simple.JSONObject;

在编码时,没有列在表右边的类需要实现JSONAware(相当于Java中自定义的类)或JSONStreamAware(相当于自定义Java中序列化的流)来实现定制化的JSON输出;在这种情况下,JSON.simple调用JSONAware.toJSONString()或 JSONStreamAware.writeJSONString() 来进行序列化,生成确定JSON文本的结果。

JSON.simple-自定义输出
有时候,我们需要以特定的方式输出JSON数据。JSON.simple提供了一种简单的方式来自定义JSON输出。
使用JSONObject.toJSONString方法,我们可以将JSON数据转换为字符串;也可以使用一个实现了JSONAware接口的自定义JSONValue实例对输出进行自定义。

Java使用【第三方JSON库】org.json.simple环境配置。
JSON.simple是一种由纯java开发的开源JSON库,包含在JSON.simple.jar中。因此需要下载一个JSON.simple.jar的JAR文件包,并在【Eclipse平台】配置构建路径。如下是我的开发环境中的配置:
在这里插入图片描述

JSON程序,例程一:
解析JSON字符串。例程演示了解析下面这个JSON字符串。
JSON字符串: { “姓名”: “雷锋”, “年龄”: 30, “是否党员”: true }
Java程序,使用Java解析JSON数据的步骤如下:
在这里插入图片描述
JSON例程一:JSONParsingExample01.java源码如下:

package json;
import java.util.Map;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JSONParsingExample01 { //基本数据类型测试
	//定义一个JSON字符串
	static final String json = "{\"姓名\":\"雷锋\",\"年龄\":30,\"是否党员\": true}";
	public static void JSONParse() {
	    //创建JSON解析器
	    JSONParser parser = new JSONParser();
	    try {  //解析JSON字符串
	        Object obj = parser.parse(json); 
	        //将解析结果转换为JSONObject
	        JSONObject jsonObject = (JSONObject) obj;
	        
	        //提取JSON字段值
	        String name = (String) jsonObject.get("姓名");
	        Number age = (Number) jsonObject.get("年龄");
	        Boolean flag = (Boolean) jsonObject.get("是否党员");
	        System.out.println("姓名: " + name);
	        System.out.println("年龄: " + age);
	        System.out.println("是否党员: " + flag);
	    } catch (ParseException e) {
	        e.printStackTrace();
	    }
	}
	
	/***JSONObject与Java中的Map***/
	public static void JSONToMap() {
	    //创建JSON解析器
	    JSONParser parser = new JSONParser();
	    try {
	        Object obj = parser.parse(json); 
	        //将解析结果转换为JSONObject
	        JSONObject jsonObject = (JSONObject) obj;
	        System.out.println(jsonObject);
	        System.out.println("*****************************");
	        // 将JSONObject转换为Map<String, Object>
	        Map<String, Object> resultMap = (Map<String, Object>)jsonObject;
	        // 输出转换后的Map
	        System.out.println(resultMap);
		} catch (ParseException e) {
	        e.printStackTrace();
		}

	}
	
	public static void main(String[] args) {
		JSONParse();
		JSONToMap();
	}
}

例程测试结果:
在这里插入图片描述
JSONParsingExample源码及所需JSON.simple.jar的JAR文件包

JSON程序,例程二:
解析 JSON 字符串并从中提取 JSONArray;向JSON数组中添加一个新的JSONObject。例程演示从下面这个JSON字符串中提取数组JSONArray;然后再往数组中增加数据,并展示更新结果。
{“姓名”: “雷锋”, “年龄”: 30, “是否党员”: true, “爱好”: [“阅读”, “音乐”, “运动”]}

例程源代码如下:

package json;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/***解析 JSON 字符串并从中提取 JSONArray***/
public class JSONParsingExample02 {
	//定义一个JSON字符串
	static final String json =  "{\"姓名\":\"雷锋\",\"年龄\":30,\"是否党员\": true,\"爱好\": [\"阅读\", \"音乐\", \"运动\"]}";

	public static void getJSONArray() {
	    //创建JSON解析器
	    JSONParser parser = new JSONParser();
	    try {    //解析JSON字符串
	        Object obj = parser.parse(json); 
	        //将解析结果转换为JSONObject
	        JSONObject jsonObj = (JSONObject) obj;
	        // 获取JSONArray,如果不存在,则返回一个新的空JSONArray
	        JSONArray hobAry = jsonObj.containsKey("爱好") ? (JSONArray)jsonObj.get("爱好") : new JSONArray();
	        // 输出获取到的JSONArray
	        System.out.println(hobAry);
		} catch (ParseException e) {
	        e.printStackTrace();
		}
	}
	
	public static void addObjToJSONArray() {
	    //创建JSON解析器
	    JSONParser parser = new JSONParser();
	    try {    //解析JSON字符串
	        Object obj = parser.parse(json); 
	        //将解析结果转换为JSONObject
	        JSONObject jsonObj = (JSONObject) obj;
	        // 获取JSONArray,如果不存在,则返回一个新的空JSONArray
	        JSONArray hobAry = (JSONArray)jsonObj.get("爱好");
	        System.out.println("初始状态:");
	        System.out.println(jsonObj);
	        System.out.println(hobAry);
	        
	        hobAry.add("足球");
	        System.out.println("更新数组后:");
	        // 输出获取到的JSONArray
	        System.out.println(jsonObj);
	        System.out.println(hobAry);
		} catch (ParseException e) {
	        e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		getJSONArray();
		addObjToJSONArray();
	}
}

例程测试结果:
在这里插入图片描述
下面是一些程序示例,演示用程序编码JSON数据,和用程序 展示 JSON 对象流:

  • 使用JSONObject编码JSON数据,
	/***使用JSONObject编码JSON数据***/
	@SuppressWarnings("unchecked")
	public static void encodeJSONobject() {
		JSONObject obj = new JSONObject();
		obj.put("姓名","张三丰");
		obj.put("年龄",new Integer(68));
		obj.put("账户余额",new Double(1056.21));
		obj.put("是否VIP用户",new Boolean(true));
		obj.put("昵称","一生何求");
		System.out.println(obj); //直接打印
		
		//JSON转换为字符串流
		StringWriter out = new StringWriter();
		try {
			obj.writeJSONString(out);
		} catch (Exception e) {
			// TODO: handle exception
		}
		String jsonText = out.toString();
		System.out.println(jsonText);
	}
  • 使用Map集合类编码JSON数据,JSON数据利用JSONValue以默认方式输出
	/***使用Map编码JSON数据***/
	public static void encodeJSONobjectMap() {	  
		Map<String, Object> obj = new LinkedHashMap<>();
		obj.put("姓名","张三丰");
		obj.put("年龄",new Integer(68));
		obj.put("账户余额",new Double(1000.21));
		obj.put("是否VIP用户",new Boolean(true));
		obj.put("昵称",null);
		
		System.out.println(obj); //直接打印格式不一样
		
		String jsonText = JSONValue.toJSONString(obj);
		System.out.println(jsonText);
	}
  • 合并两个JSON对象
package json;
import org.json.simple.JSONObject;
public class MergeJSONobjects {
	public static void main(String[] args) {
		  JSONObject obj1 = new JSONObject();
		  obj1.put("姓名","姜建国");
		  obj1.put("卡号","62231600000100286");
		  obj1.put("余额",new Double(106288.58));
		                
		  JSONObject obj2 = new JSONObject();
		  obj2.put("是否vip客户",new Boolean(true));
		  obj2.put("昵称",null);

		  obj2.putAll(obj1);

		  System.out.print(obj2);
	}
}
  • 合并两个JSON数组
package json;

import org.json.simple.JSONArray;

public class MergeJSONarray {

	public static void main(String[] args) {
		  JSONArray list1 = new JSONArray();
		  list1.add("土狗");
		  list1.add(new Integer(780));
		  list1.add(new Double(560.89));
		  
		  JSONArray list2 = new JSONArray();
		  list2.add(new Boolean(true));
		  list2.add(null);
		  list2.add("猫和老鼠");

		  list2.addAll(list1);

		  System.out.print(list2);
	}

}
  • 编码带有数组的JSON数据对象
package json;
import java.io.StringWriter;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class EncodeJSONarray {
	static String name = "雷锋";
	static String[] hobby = {"阅读", "音乐", "运动"};
	
	public static void encodeJSONarray() {
		/***编码数组信息***/
		JSONArray list = new JSONArray();
		for (int i = 0; i < hobby.length; i++) {
			list.add(hobby[i]);
		}
		
		System.out.println(list);//默认输出
		
		/**JSON数组序列化数据流输出,效果同默认输出**/
		StringWriter out = new StringWriter();
		try {	
			list.writeJSONString(out);
		} catch (Exception e) {
			// TODO: handle exception
		}

		String jsonText = out.toString();
		System.out.println(jsonText);
	}
	
	public static void encodeJSONobj() {
		JSONObject obj = new JSONObject();
		obj.put("姓名",name);
		obj.put("年龄",new Integer(30));
		obj.put("是否党员",new Boolean(true));
		
		/***编码数组信息***/
		JSONArray list = new JSONArray();
		for (int i = 0; i < hobby.length; i++) {
			list.add(hobby[i]);
		}
		obj.put("爱好", list);
		
		System.out.println(obj);
	}

	public static void main(String[] args) {
		encodeJSONarray();
		encodeJSONobj();
	}
}

程序输出结果:
在这里插入图片描述

  • 利用JSONAware,定制JSON数组的数据输出
    说明:例程中的代码使用了转义字符。
package json;
import org.json.simple.JSONArray;
import org.json.simple.JSONAware;
import org.json.simple.JSONObject;
/***定制JSON输出***/
public class CustomizeJSONoutput {
	private JSONArray users;
	
	@SuppressWarnings("unchecked")
	public CustomizeJSONoutput() {
		users = new JSONArray();
		users.add(new User(1001,"张明", "passwd@6"));
		users.add(new User(2003,"王五", "psword$!"));
		users.add(new User(3001,"李四", "newsky&"));
	}
	
	public void jsonOutput() {
		System.out.println(users);
	}
	  
	public static void main(String[] args) {
		CustomizeJSONoutput output = new CustomizeJSONoutput();
		output.jsonOutput();
	}

	private class User implements JSONAware {
        private int id;
        private String name;
        private String password;
        
        public User(int id, String name, String password){
                this.id = id;
                this.name = name;
                this.password = password;
        }
        
        @Override
        public String toJSONString(){
            StringBuffer sbuf = new StringBuffer();
            
            sbuf.append("{");
            
            sbuf.append(JSONObject.escape("用户名"));
            sbuf.append(":");
            sbuf.append("\"" + JSONObject.escape(name) + "\"");
            
            sbuf.append(",");
            
            sbuf.append(JSONObject.escape("用户ID"));
            sbuf.append(":");
            sbuf.append(id);
            
            sbuf.append("}");
            
            return sbuf.toString();
        }
	}
}
  • 利用JSONStreamAware,定制JSON数组的数据输出
package json;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.LinkedHashMap;
import org.json.simple.JSONArray;
import org.json.simple.JSONStreamAware;
import org.json.simple.JSONValue;
public class CustomJSONStreamValueExample {
    public static void main(String[] args) {
    	JSONArray students = new JSONArray();
    	students.add(new Student(1201,"雷锋", "newPswd"));
    	students.add(new Student(1202,"王继光", "ps@wd"));
    	students.add(new Student(1203,"罗盛教", "sup&wd"));
    	StringWriter out = new StringWriter();
    	try {
    		  students.writeJSONString(out);
		} catch (Exception e) {
			// TODO: handle exception
		}
    	  
    	System.out.println(out.toString());
    }
}

class Student implements JSONStreamAware {
    private int id;
    private String name;
    private String password;
    
    public Student(int id, String name, String password){
            this.id = id;
            this.name = name;
            this.password = password;
    }
    
   @Override
   public void writeJSONString(Writer out) throws IOException {
       LinkedHashMap<String, Object> obj = new LinkedHashMap<>();
       obj.put("姓名", name);
       obj.put("ID号", new Integer(id));
       JSONValue.writeJSONString(obj, out);
   } 
}

在这里插入图片描述

JSON数据输出到文件
示例程序1:JSON数据输出保存到文件,从文件读入JSON数据,并打印输出。JSONtoFileTest.java

/****把JSON格式数据输出到文件之一****/
package json;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JSONtoFileTest {
	public static final String[] messages = {
		"民族英雄,左宗堂收复新疆,功成名就,永垂青史!",
		"民族英雄,岳飞精忠保国,壮志难酬,受陷害而死。作品《满江红 怒发冲冠》意难平,千古传诵。"	
	};
	public static final String[] names = {
		"左宗堂","岳飞"
	};
	public static final int[] ages = {100,60};
	public static void writeToFile(String file) {
		String path = "d:\\Temp\\"+file;
		JSONArray list = new JSONArray();
		for (int i = 0; i < 2; i++) {
			JSONObject obj = new JSONObject();
			obj.put("姓名", names[i]);
			obj.put("年龄", ages[i]);
			obj.put("信息", messages[i]);
			list.add(obj);
		}

		try { //"d:\\Temp\\test.json"
			FileWriter fileWriter = new FileWriter(path);
			fileWriter.write(list.toJSONString());
			fileWriter.flush();
			fileWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(list);		
	}


	public static void readFromFile(String file) {
		String path = "d:\\Temp\\"+file;
		JSONParser parser = new JSONParser();
		try {  //"d:\\Temp\\test.json"
			JSONArray list = (JSONArray)parser.parse(new FileReader(path));
			Iterator<JSONObject> iterator = list.iterator();
			JSONObject obj;
			String name;
			String message;
			long age;
			while (iterator.hasNext()) {
				obj = (JSONObject)(iterator.next());
				name = (String) obj.get("姓名");
				message = (String) obj.get("信息");
				age = (Long) obj.get("年龄");
				System.out.println("姓名:"+name+"  年龄:"+age);
				System.out.println("信息内容:"+message);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
	
	
	public static void main(String[] args) {
		String file = "test.json";
		writeToFile(file);
		System.out.println("******从文件中读入的信息内容:");
		readFromFile(file);
	}

}

程序测试结果:
在这里插入图片描述

示例程序2:JSON数据输出保存到文件,从文件读入JSON数据,并打印输出。JSONtoFile2.java

/****把JSON格式数据输出到文件之二****/
package json;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class JSONtoFile2 {
	public static final String[] 爱好 = {
			"阅读", "音乐", "运动"
		};
		
	public static void writeToFile(String file) {
		String path = "d:\\Temp\\"+file;
		JSONObject object = new JSONObject();
		object.put("姓名", "雷锋");
		object.put("年龄", 30);
		object.put("是否党员", true);
		
		JSONArray list = new JSONArray();
		for (int i = 0; i < 爱好.length; i++) {
			list.add( 爱好[i] );
		}
		object.put("爱好", list);

		try { 
			FileWriter fileWriter = new FileWriter(path);
			fileWriter.write(object.toJSONString());
			fileWriter.flush();
			fileWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(object);
	}
	
	public static void readFromFile(String file) {
		String path = "d:\\Temp\\"+file;
		JSONParser parser = new JSONParser();
		try {  
			JSONObject object = (JSONObject)parser.parse(new FileReader(path));
			String name;
			boolean flag;
			long age;
			JSONArray list;
			
			name = (String) object.get("姓名");
			flag = (Boolean) object.get("是否党员");
			age = (Long) object.get("年龄");
			list = (JSONArray)object.get("爱好");
			
			String message = "爱好:";
			Iterator<String> iterator = list.iterator();
			while (iterator.hasNext()) {
				message += iterator.next()+'\t';
			}
			System.out.print("姓名:"+name+'\t');
			System.out.print("年龄:"+age+'\t');
			System.out.println("是否党员:"+flag);
			System.out.println(message);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		String file = "testB.json";
		writeToFile(file);
		System.out.println("******从文件中读入的信息内容:");
		readFromFile(file);
	}

}

程序测试结果:
在这里插入图片描述

  • 容器工厂用法演示。使用容器来解码JSON数据。
package json;
//容器工厂用法演示
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONValue;
import org.json.simple.parser.ContainerFactory;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
//容器工厂用法演示
public class ContainerFactoryTest {

	public static void main(String[] args) {
		String jsonText = "{\"姓名\": \"雷锋\", \"年龄\": 30, \"是否党员\": true, \"爱好\": [\"阅读\", \"音乐\", \"运动\"]}";
		JSONParser parser = new JSONParser();
		ContainerFactory container = new ContainerFactory(){
		    public List<Object> creatArrayContainer() {
		        return new LinkedList<>();
		    }
		    
			public Map<Object, Object> createObjectContainer() {
			    return new LinkedHashMap<>();
			}
	  };
	  
	  try{
		   Map<Object, Object> map = (Map<Object, Object>)parser.parse(jsonText, container);
		   Iterator iter = map.entrySet().iterator();
		   System.out.println("==迭代结果==");

		   while(iter.hasNext()){
		      Map.Entry entry = (Map.Entry)iter.next();
		      System.out.println(entry.getKey() + "=>" + entry.getValue());
		   }
		                        
		   System.out.println("==toJSONString()==");
		   System.out.println(JSONValue.toJSONString(map));
		 }
	  catch(ParseException pe){
		    System.out.println(pe);
	  }
	}
}

程序测试结果:
在这里插入图片描述

  • 类似SAX的解析器中的事件内容处理器演示
package json;
/***类似SAX的解析器中的事件内容处理器演示***/
import java.io.IOException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.ContentHandler;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class ContentHandlerSAX implements ContentHandler {
	private Object value;
	private boolean found = false;
	private boolean end = false;
	private String key;
	private String matchKey;
	
	public void setMatchKey(String matchKey){
		this.matchKey = matchKey;
	}
	
	public Object getValue(){
		return value;
	}
	
	public boolean isEnd(){
		return end;
	}

	public void setFound(boolean found){
		 this.found = found;
	}
     
	public boolean isFound(){
		 return found;
	}
	  
	/***以下是重载方法***/
	@Override
	public boolean endArray() throws ParseException, IOException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void endJSON() throws ParseException, IOException {
		end = true;
	}

	@Override
	public boolean endObject() throws ParseException, IOException {
		return true; 
	}

	@Override
	public boolean endObjectEntry() throws ParseException, IOException {
		return true;
	}

	@Override
	public boolean primitive(Object value) throws ParseException, IOException {
	    if(key != null){
	    	if(key.equals(matchKey)){
		        found = true;
		        this.value = value;
		        key = null;
		        return false;
	    	}
	    }
		return true;
	}

	@Override
	public boolean startArray() throws ParseException, IOException {
		return true;
	}

	@Override
	public void startJSON() throws ParseException, IOException {
	    found = false;
	    end = false;
	}

	@Override
	public boolean startObject() throws ParseException, IOException {
		return true;
	}

	@Override
	public boolean startObjectEntry(String key) throws ParseException, IOException {
	    this.key = key;
	    return true;
	}

	public static void main(String[] args) {
		String[] iDStrings = {"2001","2002","2003"}; 
		String[] names = {"雷锋","王继光","罗盛教"};
		
		JSONArray list = new JSONArray();
		JSONObject obj ;
		for (int i = 0; i < names.length; i++) {
			obj = new JSONObject();
			obj.put("编号", iDStrings[i]);
			obj.put("姓名", names[i]);
			list.add(obj);
		}
		System.out.println(list);

		/***分析JSON数据***/
		JSONParser parser = new JSONParser();
		ContentHandlerSAX finder = new ContentHandlerSAX();
		finder.setMatchKey("编号");
		try{
		    while(!finder.isEnd()){
		        parser.parse(list.toJSONString(), finder, true);
		        if(finder.isFound()){
		        	finder.setFound(false);
			        System.out.println("找到编号:");
			        System.out.println(finder.getValue());
		        }
		    }           
		}
		catch(ParseException pe){
		    pe.printStackTrace();
		}
	}
}

程序测试结果:
在这里插入图片描述

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

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

相关文章

计算机类主题会议推荐之——AIIIP 2024

【ACM出版 |IEEE&ACM院士、CCF杰出会员担任组委| 往届会后4个月检索 】 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 中国-天…

QT QSlider控件-主介绍 触发函数常用函数

QSlider控件是Qt库中用于提供一个可拖动滑块以选择数值或范围的界面元素。它广泛应用于需要用户进行数值调节的场景&#xff0c;如音量控制、亮度调整等。 一、QAbstractSlider的6个信号量触发函数&#xff1a; 1、void actionTriggered (int action): 当滑块上的某个可定义动…

EXCEL 复制后转置粘贴

nodepad 转置参考&#xff1a; https://editor.csdn.net/md/?articleId140014651 1. WPS复制后转置粘贴 复制-》右键-》顶部第一行-》粘贴行列转置&#xff0c;如下图&#xff1a; 2. Excel office365 本地版 2. Excel office365 在线版

module java.base does not “opens java.lang“ to unnamed module

目录 原因&#xff1a;解决方法&#xff1a;方法一&#xff1a;方法二&#xff1a;方法三&#xff1a; SpringBoot项目运行报如下错误 Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.def…

关于组织赴俄罗斯(莫斯科)第 28 届国际汽车零部件、汽车维修设备和商品展览会商务考察的通知

关于组织赴俄罗斯&#xff08;莫斯科&#xff09; 第 28 届国际汽车零部件、汽车维修设备和商品展览会商务考察的通知 展会名称&#xff1a;俄罗斯&#xff08;莫斯科&#xff09;第 28 届国际汽车零部件、汽车零部件、汽车维修设备和商品展览会 时间&#xff1a;2024 年 8 月…

仓库管理系统19--盘存管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、什么是盘存 盘存也叫盘库&#xff0c;盘库是指对一个仓库、库房或者商店的库存进行全面清点和核对的过程。在盘库过程中&am…

解决403 Forbidden错误的全面指南,快速解决403 Forbidden错误

在浏览互联网时&#xff0c;遭遇到“403 Forbidden”错误可以说是既常见又令人困惑。这个错误提示通常意味着服务器理解请求但拒绝授权访问。尽管它可能看起来让人无从下手&#xff0c;但通过一些方法通常可以找到原因并解决这个问题。 什么是403 Forbidden错误&#xff1f; “…

小到微妙:少女微笑

一、妙与不妙&#xff0c;少女与微笑 我们曾经解过汉字“妙”&#xff0c;妙字可以拆分为少女二字&#xff0c;即&#xff1a; 妙 女 少 少女 但这&#xff0c;其实并没有对 “妙”字 完成完整性解析&#xff0c;如果要完成完整性的说明&#xff0c;应当加上微笑&#xff0…

1、Python编程入门:从硬件基础到解释器类型

Python是一种免费、开源、跨平台、动态、面向对象的编程语言。它以其简洁易读的语法和强大的功能而闻名&#xff0c;广泛应用于各种领域&#xff0c;如Web开发、数据分析、人工智能等。本文将介绍Python的基本概念、执行方式以及常用的Linux命令&#xff0c;帮助初学者快速入门…

Ascend基于自定义算子工程的算子开发

环境准备 见https://gitee.com/zaj1414904389/ascend-tutorial.git 工程创建 CANN软件包中提供了工程创建工具msopgen&#xff0c;开发者可以输入算子原型定义文件生成Ascend C算子开发工程 [{"op": "AddCustom","input_desc": [{"name…

Java的NIO体系

目录 NIO1、操作系统级别下的IO模型有哪些&#xff1f;2、Java语言下的IO模型有哪些&#xff1f;3、Java的NIO应用场景&#xff1f;相比于IO的优势在哪&#xff1f;4、Java的IO、NIO、AIO 操作文件读写5、NIO的核心类 :Buffer&#xff08;缓冲区&#xff09;、Channel&#xff…

版本控制系统:Git 纯应用(持续更新)

基本操作 ctrl上行键&#xff1a;上次代码 本地仓库&#xff1a;Git init 新建文件&#xff1a;touch xxxx.xxx 查看状态&#xff1a;Git status 文件从工作区——暂存区&#xff1a;Git add ./文件名(.是通配符代表所有) 暂存区——仓库&#xff1a;Git commit -m &…

如何利用ChatGPT改善日常生活:一个普通人的指南

当你打开 ChatGPT&#xff0c;显现的是一个简洁的聊天界面。 许多人利用 ChatGPT 进行日常对话。 然而&#xff0c;ChatGPT 的功能远不止于此。 对话只是其众多能力中的一种&#xff0c;如果仅将其视为高级版的聊天机器人&#xff0c;那未免低估了它。 AI 在信息处理方面的…

【计算机毕业设计】073智慧旅游平台开发微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

力扣第一道困难题《3. 无重复字符的最长子串》,c++

目录 方法一&#xff1a; 方法二&#xff1a; 方法三&#xff1a; 方法四&#xff1a; 没有讲解&#xff0c;但给出了优秀题解 本题链接&#xff1a;4. 寻找两个正序数组的中位数 - 力扣&#xff08;LeetCode&#xff09; 话不多说&#xff0c;我们直接开始进行本题的思路解…

【Mybatis】Mybatis初识-通过源码学习执行流程

文章目录 1.Mybatis核心组件1.1 SqlSession1.2 SqlSessionFactory1.3 Mapper1.4 MappedStatement1.5 Executor 2. Mybatis各组件之间关系3. 构建SqlSessionFactory3.1 从XML文件中构建3.2 不使用XML构建SqlSessionFactory 4. 如何从SqlSessionFactory获取SqlSession5.获取Mappe…

计算机专业课面试常见问题-编程语言篇

目录 1. 程序的编译执行流程&#xff1f; 2. C浅拷贝和深拷贝的区别&#xff1f; 3. C虚函数&#xff1f; …

Linux --账号和权限管理

目录 1、 管理用户账号和组账概述 1.1 用户账号分类 1.2 组账号 1.3 UID 和 GID 2、用户账号文件 2.1 passwd 2.2 shadow 3、管理目录和文件属性 3.1 chage 命令 3.2 useradd 命令 3.3 passwd 命令 ​编辑3.4 usermod 命令 3.5 userdel 命令 4、用户账户的初始配置…

全面体验ONLYOFFICE 8.1版本桌面编辑器

ONLYOFFICE官网 在当今的数字化办公环境中&#xff0c;选择合适的文档处理工具对于提升工作效率和团队协作至关重要。ONLYOFFICE 8.1版本桌面编辑器&#xff0c;作为一款集成了多项先进功能的办公软件&#xff0c;为用户提供了全新的办公体验。今天&#xff0c;我们将深入探索…

【分布式系列】分布式锁的设计与实现

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…