JAVA基础18 生成和解析JSON

JAVA基础

18.生成和解析JSON

1.什么是JSON?JSON的作用?如何编写JSON?

JSON
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON是一种完全独立于编程语言的文本格式来存储和表示数据的轻量级的数据交换格式。
用我们的话说就是一套具有固定格式的用于保存或者表示数据的字符串
Json数据的组成
一个json数据是由两部分组成
1.Json对象:
用一组“{}”包围键/值对组合,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值,多个键/值对组合中间用“,”分隔。
使用“{}”包围,里面是键值对数据,键值对中的键要使用双引号包围,键与值之间用“:”分割,如果有多个键值对使用“,”分割
Json对象通常是用来保存一个java对象的。
一个java对象转换成json对象以后是什么样子?
例如:

package com.click369.test1;
public class Person {
	private int  perid;
	private String pername;
	private int perage;
	private String peraddress;
	public int getPerid() {
		return perid;
	}
	public void setPerid(int perid) {
		this.perid = perid;
	}
	public String getPername() {
		return pername;
	}
	public void setPername(String pername) {
		this.pername = pername;
	}
	public int getPerage() {
		return perage;
	}
	public void setPerage(int perage) {
		this.perage = perage;
	}
	public String getPeraddress() {
		return peraddress;
	}
	public void setPeraddress(String peraddress) {
		this.peraddress = peraddress;
	}
}

//创建一个person类的对象

Person  person1=new Person();
person1.setPerid(1001);
person1.setPername("zhangsan");
person1.setPerage(23);
person1.setPeraddress("西安");
//将person1这个java对象转换成json对象对应的字符串数据
{"perid":1001,"pername":"zhangsan","perage":23,"peraddress":"西安"}---json对象

2.Json数组
JSON 表示数组的方式就是是使用方括号 []。
Json数组是用来保存java数组数据/集合数据
例如:

package com.click369.test1;
public class Person {
	private int  perid;
	private String pername;
	private int perage;
	private String peraddress;
	public int getPerid() {
		return perid;
	}
	public void setPerid(int perid) {
		this.perid = perid;
	}
	public String getPername() {
		return pername;
	}
	public void setPername(String pername) {
		this.pername = pername;
	}
	public int getPerage() {
		return perage;
	}
	public void setPerage(int perage) {
		this.perage = perage;
	}
	public String getPeraddress() {
		return peraddress;
	}
	public void setPeraddress(String peraddress) {
		this.peraddress = peraddress;
	}
}
Person  person1=new Person();
person1.setPerid(1001);
person1.setPername("zhangsan");
person1.setPerage(23);
person1.setPeraddress("西安");
Person  person2=new Person();
person2.setPerid(1002);
person2.setPername("lisi");
person2.setPerage(24);
person2.setPeraddress("北京");
Person  person3=new Person();
person3.setPerid(1003);
person3.setPername("wangwu");
person3.setPerage(25);
person3.setPeraddress("上海");
//创建一个保存person对象的集合
List<Person>  personlist=new ArrayList<Person>();
//将上面创建的3个person对象保存到集合中
personlist.add(person1);
personlist.add(person2);
personlist.add(person3);
//将保存有3个perosn对象的集合转换成json数组之后会是什么样子??
[
{"perid":1001,"pername":"zhangsan","perage":23,"peraddress":"西安"}, ---json对象
	{"perid":1002,"pername":"lisi","perage":24,"peraddress":"北京"},  ---json对象
	{"perid":1003,"pername":"wangwu","perage":25,"peraddress":"上海"}  ---json对象
] ---  json数组

一个json数组中保存了3个json对象
通常情况下我们所遇到的json数据都是json对象中包含json数组,json数组中又包含json对象的形式
例如:

package com.click369.test2;
/**
 * 保存地址信息的java类
 * @author Administrator
 *
 */
public class PersonAddress {
	private  String type; //地址类型【家庭/工作】
	private  String info; //地址信息
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
}
package com.click369.test2;
public class Person {
	private int  perid;
	private String pername;
	private int perage;
	//保存地址信息的数组
	private PersonAddress  peraddress[];
	public int getPerid() {
		return perid;
	}
	public void setPerid(int perid) {
		this.perid = perid;
	}
	public String getPername() {
		return pername;
	}
	public void setPername(String pername) {
		this.pername = pername;
	}
	public int getPerage() {
		return perage;
	}
	public void setPerage(int perage) {
		this.perage = perage;
	}
	public PersonAddress[] getPeraddress() {
		return peraddress;
	}
	public void setPeraddress(PersonAddress[] peraddress) {
		this.peraddress = peraddress;
	}
}
//创建3个person类的对象
Person  person1=new Person();
person1.setPerid(1001);
person1.setPername("zhangsan");
person1.setPerage(23);
//创建保存地址信息的数组
PersonAddress  peraddress[]=new PersonAddress[2];
//创建两个地址的对象
PersonAddress  address1=new PersonAddress();
address1.setType("home");
address1.setInfo("西安");
PersonAddress  address2=new PersonAddress();
address2.setType("work");
address2.setInfo("北京");
//将创建好的地址对象装入数组
peraddress[0]=address1;
peraddress[1]=address2;
person1.setPeraddress(peraddress);
Person  person2=new Person();
person2.setPerid(1002);
person2.setPername("lisi");
person2.setPerage(24);
//创建保存地址信息的数组
PersonAddress  peraddress2[]=new PersonAddress[2];
//创建两个地址的对象
PersonAddress  address21=new PersonAddress();
address21.setType("home");
address21.setInfo("上海");
PersonAddress  address22=new PersonAddress();
address22.setType("work");
address22.setInfo("重庆");
//将创建好的地址对象装入数组
peraddress2[0]=address21;
peraddress2[1]=address22;
person2.setPeraddress(peraddress2);
Person  person3=new Person();
person3.setPerid(1003);
person3.setPername("wangwu");
person3.setPerage(25);
//创建保存地址信息的数组
PersonAddress  peraddress3[]=new PersonAddress[2];
//创建两个地址的对象
PersonAddress  address31=new PersonAddress();
address31.setType("home");
address31.setInfo("广州");
PersonAddress  address32=new PersonAddress();
address32.setType("work");
address32.setInfo("西安");
//将创建好的地址对象装入数组
peraddress3[0]=address31;
peraddress3[1]=address32;
person3.setPeraddress(peraddress3);
//创建一个保存person对象的集合
List<Person> personlist=new ArrayList<Person>();
//将创建的person对象存储至集合中
personlist.add(person1);
personlist.add(person2);
personlist.add(person3);

将上面的集合转换成json数据字符串以后是什么样子???

[
{ "perid":1001,
	 "pername":"zhangsan",
	 "perage":23,
	 "peraddress":[
		         {"type":"home","info":"西安"},
		         {"type":"work","info":"北京"}
		        ]----json数组
	},  -- json对象
	{"perid":1002,
	 "pername":"lisi",
	 "perage":24,
	 "peraddress":[
		         {"type":"home","info":"上海"},
		         {"type":"work","info":"重庆"}
		        ]
	},
	{"perid":1003,
	 "pername":"wangwu",
	 "perage":25,
	 "peraddress":[
	 	         {"type":"home","info":"广州"},
		         {"type":"work","info":"西安"}
		        ]
	}
]
2.JSON文件的生成方式和解析方式?
通过java程序生成JSON数据

1.json-simple-1.1.jar第三方的开发包生成json数据**

/**
	 * 1.json-simple-1.1.jar第三方的开发包生成json数据
	 * 1.1 下载json-simple的开发包
	 * 1.2 导入开发包
	 */
	public  static  void  jsonSimpleCreatejson(List<Person> personlist)throws Exception{
		//创建JSONArray对象
		JSONArray  personlistJSONArray=new JSONArray(); 
		//循环变变量需要生产json数据的集合
		for(Person person:personlist){
			//创建JSONObject对象
			JSONObject  personObjectJSONObject=new JSONObject();
			//为这个json对象添加键值对数据
			personObjectJSONObject.put("perid",person.getPerid());
			personObjectJSONObject.put("pername",person.getPername());
			personObjectJSONObject.put("perage",person.getPerage());
			//得到保存有地址信息的数组
			PersonAddress  peraddresss[]=person.getPeraddress();
			//创建一个保存地址数组的JSONArray对象
			JSONArray  personAddressJSONArray=new JSONArray(); 
			//变量保存地址信息的数组
			for(PersonAddress peraddressObj:peraddresss){
				//创建保存地址信息的JSONObject对象
				JSONObject  peraddressJSONObject=new JSONObject();
				peraddressJSONObject.put("type",peraddressObj.getType());
				peraddressJSONObject.put("info", peraddressObj.getInfo());
				//将保存有保存地址信息的JSONObject对象保存到保存地址数组的JSONArray对象
				personAddressJSONArray.add(peraddressJSONObject);
			}
			personObjectJSONObject.put("peraddress",personAddressJSONArray);
			//将创建好的json对象保存到json数组中
			personlistJSONArray.add(personObjectJSONObject);
		}
		//创建文件对象
		File f=new File("person_json_1.txt");
		//创建输出流对象
		FileWriter  out=new FileWriter(f);
		//将组织好的json数组对象转换成json字符串,通过输出流写出
		out.write(personlistJSONArray.toJSONString());
		out.close();
	}

2.gson-2.8.0.jar第三方的开发包生成json数据

/**
 * 用过gson-2.8.0.jar第三方的开发包生成json数据
 */
@Test
public  void  testGsonCreateJson()throws Exception{
    String  jsonInfo=new Gson().toJson(JSONHelper.getPersonObjectList());
	File f=new File("person2.txt");
	FileWriter  out=new FileWriter(f);
	out.write(jsonInfo);
	out.close();
}

3.jackson第三方的开发包生成json数据
“jackson-core-2.9.5.jar”
“jackson-databind-2.9.5.jar”
“jackson-annotations-2.9.5.jar”

/**
	 * 用过jackson-2.9.5.jar第三方的开发包生成json数据
	 */
	@Test
	public  void  testJackson_databindCreateJson()throws Exception{
        String  jsonInfo=new ObjectMapper().writeValueAsString(JSONHelper.getPersonObjectList());
		File f=new File("person3.txt");
		FileWriter  out=new FileWriter(f);
		out.write(jsonInfo);
		out.close();
	}
通过java程序解析JSON数据

1.json-simple-1.1.jar第三方的开发包解析json数据

package com.click369.test3;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
/**
 * 专门用来解析json数据的java类
 * @author Administrator
 *
 */
public class MyJson {
	/**
	 * 1.json-simple-1.1.jar第三方的开发包解析json数据
	 * 
	 */
	public  static  List<Person>  jsonSimpleJieXiJson(File  jsonfile)throws Exception{
		 List<Person>  personList=new ArrayList<Person>();
		 //创建一个json解析器对象
		 JSONParser parser = new JSONParser(); 
		 //创建一个输入流对象
		 FileReader  in=new FileReader(jsonfile);
		 //将json文件解析成一个json数组
		 JSONArray personlistArray=(JSONArray)parser.parse(in);
		 //遍历保存有PersonList的json数组
		 for(int i=0;i<personlistArray.size();i++){
			 //创建保存解析信息的person对象
			 Person  person=new Person();
			 //从保存有personlist的json数组中得到保存person对象的json对象
			 JSONObject  personObject=(JSONObject)personlistArray.get(i);
			 //保存person对象的json对象中得到对应的成员变量值
			 long perid=(Long)personObject.get("perid");
			 int id=(int)perid;
			 //保存perid到person对象中
			 person.setPerid(id);
			 String pername=(String)personObject.get("pername");
			 //保存pername到person对象中
			 person.setPername(pername);
			 long perage=(Long)personObject.get("perage");
			 int age=(int)perage;
			 //保存perage到person对象中
			 person.setPerage(age);
			 //从保存person对象的json对象中取出保存了地址信息的数组
			 JSONArray addressArray=(JSONArray)personObject.get("peraddress");
			 //创建一个保存地址信息的数组
			 PersonAddress  peraddress[]=new PersonAddress[addressArray.size()];
			 for(int j=0;j<addressArray.size();j++){
				 //创建保存地址信息的对象
				 PersonAddress  peraddressObj=new PersonAddress();
				 //从保存地址信息的json数组中得到保存地址信息的json对象
				 JSONObject addressObject=(JSONObject)addressArray.get(j);
				 //从地址的json对象中取出地址信息
				 String type=(String)addressObject.get("type");
				 //得到得到的地址类型保存到地址对象中
				 peraddressObj.setType(type);
				 String info=(String)addressObject.get("info");
				 //得到得到的地址信息保存到地址对象中
				 peraddressObj.setInfo(info);
				 //将地址对象保存到地址数组中
				 peraddress[j]=peraddressObj;
			 }
			 //将地址数组保存到person对象中
			 person.setPeraddress(peraddress);
			 //将person对象保存至集合
			 personList.add(person);
		 }
		 return personList;
	}
}

2.gson-2.8.0.jar第三方的开发包解析json数据

/**
	 * 2.gson-2.8.0.jar第三方的开发包解析json数据
	 * @throws Exception
	 */
	@Test
	public  void  gsonParserJSON()throws Exception{
		JsonElement  personJsonElement=(JsonElement)new JsonParser().parse(new FileReader(new File("person3.txt")));
		JsonArray personArray=personJsonElement.getAsJsonArray();
		for(int i=0;i<personArray.size();i++){
			int perid=personArray.get(i).getAsJsonObject().get("perid").getAsInt();
			String pername=personArray.get(i).getAsJsonObject().get("pername").getAsString();
			int perage=personArray.get(i).getAsJsonObject().get("perage").getAsInt();
			String peraddress=personArray.get(i).getAsJsonObject().get("peraddress").getAsString();
			System.out.println(perid+" "+pername+" "+perage+" "+peraddress);
		}
	}

3.jackson第三方的开发包解析json数据
“jackson-core-2.9.5.jar”
“jackson-databind-2.9.5.jar”
“jackson-annotations-2.9.5.jar”

/**

  • jackson第三方的开发包解析json数据
  • @throws Exception
    */
    @Test
    public void jacksonParserJSON()throws Exception{
    JsonNode rootNode=new ObjectMapper().readTree(new File(“person3.txt”));
    for(int i=0;i<rootNode.size();i++){
    int perid=rootNode.get(i).get(“perid”).asInt();
    String pername=rootNode.get(i).get(“pername”).asText();
    int perage=rootNode.get(i).get(“perage”).asInt();
    String peraddress=rootNode.get(i).get(“peraddress”).asText();
    System.out.println(perid+" “+pername+” “+perage+” "+peraddress);
    }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值