JSON的生成和解析

一、什么是Jso

JSOn(JavaScript  Object  Notation ,JS对象简谱)采用完全独立于编程语言的用文本格式来存储和表示数据的轻量级的数据交换格式。

二、JSON的作用是什么

存储和表示数据的文本格式。

三、如何编写JSON

 JSON是由2个元素组成
第一个元素,json对象
格式:{数据值---键值对,}
名称:数据值---键值对
键值对中的键要有" ",键值对的值字符串和时间日期型的数据需要" "。
我们将java对象转换成json对象以后的结果。
public  class  Student{
        private int stuid;
        private String stuname;
        private int stuage;
        private String stuaddress;
        getXXX()/setXXX()
}
Student student=new Student();
student.setStuid(1001);
student.setStuname("fxt");
student.setStuage(22);
student.setStuaddress("西安");
json对象
{"stuid":1001,"stuname":"fxt","stuage":22,"stuaddress":"西安"}
第二个元素,json数组
格式:[具体数据值/json对象]
我们将java集合/数组转换成json数组以后的结果。
public class  Student{
        private int stuid;
        private String stuname;
       private  int stuage;
        private  String stuaddress;
        getXXX()/setXXX()     
}
Student  stu1=new Student();
    stu1.setStuid(1001);
    stu1.setStuname("zhangsan");
    stu1.setStuage(23);
    stu1.setStuaddress("西安");
    Student  stu2=new Student();
    stu2.setStuid(1002);
    stu2.setStuname("lisi");
    stu2.setStuage(24);
    stu2.setStuaddress("北京");
    Student  stu3=new Student();
    stu3.setStuid(1003);
    stu3.setStuname("wangwu");
    stu3.setStuage(25);
    stu3.setStuaddress("上海");
    List<Student> studentlist=new ArrayList<Student>();
    studentlist.add(stu1);
    studentlist.add(stu2);
    studentlist.add(stu3);
json数组
    [
     {"stuid":1001,"stuname":"zhangsan","stuage":23,"stuaddress":"西安"},---stu1
     {"stuid":1002,"stuname":"lisi","stuage":24,"stuaddress":"北京"},---stu2
     {"stuid":1003,"stuname":"wangwu","stuage":25,"stuaddress":"上海"}---stu3
    ]----studentlist
java数组
    String  names[]={"zhangsan","lisi","wangwu"};
json数组
    ["zhangsan","lisi","wangwu"]
我们以后所面临的json数据都是相互嵌套的,json数组中有json对象,json对象中有json数组。
当我们得到一个极其复杂的json数据后,搞不清楚这个json数据的结构。
我们可以利用工具【https://www.json.cn/】得到明晰的json数据的结构。

四、生成JSON

1.json-simple-1.1.jar第三方的开发包生成json数据
例如:
    1.1先创建要转换的student类和Myaddress类

package com.wangxing.test1;
import java.util.List;

public class Student {
	private int stuid;
	private String stuname;
	private int stuage;
	private Myaddderss addressliast[];
	public int getStuid() {
		return stuid;
	}
	public void setStuid(int stuid) {
		this.stuid = stuid;
	}
	public String getStuname() {
		return stuname;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}
	public int getStuage() {
		return stuage;
	}
	public void setStuage(int stuage) {
		this.stuage = stuage;
	}
	public Myaddderss[] getAddressliast() {
		return addressliast;
	}
	public void setAddressliast(Myaddderss[] addressliast) {
		this.addressliast = addressliast;
	}
}
package com.wangxing.test1;

public class Myaddderss {
	private String type;
	private String address;
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

    1.2创建主方法先把student李的值和Myaddress中的值赋上,得到一个集合里面有对象和数组

package com.wangxing.test1;

import java.util.ArrayList;
import java.util.List;

public class Mian {
	public static void main(String args[]){
		Student student1=new Student();
		student1.setStuid(1001);
		student1.setStuname("fxt");
		student1.setStuage(22);
		Myaddderss stu1addderss1=new Myaddderss();
		stu1addderss1.setType("工作");
		stu1addderss1.setAddress("会展中心");
		Myaddderss stu1addderss2=new Myaddderss();
		stu1addderss2.setType("家庭地址");
		stu1addderss2.setAddress("文景路");
		//创建地址的集合
		Myaddderss myaddderss1[]={stu1addderss1,stu1addderss2};
		student1.setAddressliast(myaddderss1);
		
		Student student2=new Student();
		student2.setStuid(1002);
		student2.setStuname("ch");
		student2.setStuage(22);
		Myaddderss stu2addderss1=new Myaddderss();
		stu2addderss1.setType("工作");
		stu2addderss1.setAddress("纬一街");
		Myaddderss st21addderss2=new Myaddderss();
		st21addderss2.setType("家庭地址");
		st21addderss2.setAddress("响塘德苑");
		Myaddderss myaddderss2[]={stu2addderss1,stu1addderss2};
		student2.setAddressliast(myaddderss2);
		//创建一个student的集合
		List<Student> studentlist=new ArrayList<>();
		studentlist.add(student1);
		studentlist.add(student2);
		JsonClass.createJson1(studentlist);
	}
}

     1.3创建生成Json的帮助类

package com.wangxing.test1;

import java.util.List;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class JsonHelper {
	/**
	 * 1.json-simple-1.1.jar第三方的开发包生成json数据
	 * @param studentlist
	 */
	public static void createJson1(List<Student> studentlist) {
		//创建studentlist对应的json数组
		JSONArray studentlistArray=new JSONArray();
		//遍历集合
		for(Student studentObject:studentlist){
			//创建student对应的json对象
			JSONObject studentJsonObject=new JSONObject();
			studentJsonObject.put("stuid",studentObject.getStuid());
			studentJsonObject.put("stuname",studentObject.getStuname());
			studentJsonObject.put("stuage",studentObject.getStuage());
			//得到保存得到内部数组的JSON对象
			JSONArray addressListArray=new JSONArray();
			//得到student对象的myaddress数组
		 	Myaddderss  myaddress[]=studentObject.getAddressliast();
			//遍历student对象的address数组
			for(Myaddderss adsressObject:myaddress){
				//创建接收地址的json节点对象
				JSONObject adsressJsonObject=new JSONObject();
				adsressJsonObject.put("type", adsressObject.getType());
				adsressJsonObject.put("address",adsressObject.getAddress());
				addressListArray.add(adsressJsonObject);
			}
			studentJsonObject.put("myAddress",addressListArray);
			studentlistArray.add(studentJsonObject);
		}
		String json=studentlistArray.toString();
		System.out.println(json);
	}
}

    1.4测试,利用JSON在线解析
       

 

 

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

package com.wangxing.test1;

import java.util.List;
import com.google.gson.Gson;

public class JsonHelper {
	/**
	 * 2.gson-2.8.0.jar第三方的开发包生成json数据
	 * @param studentlist
	 */
	public static void createJson2(List<Student> studentlist) {
		//创建gson对象
		Gson gson=new Gson();
		//将需要转换的集合对象(这里你需要知道集合的结构)
		String json=gson.toJson(studentlist);
		System.out.println(json);
	}
}

 3.jackson第三方的开发包生成json数据
例如:

package com.wangxing.test1;

import java.util.List;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonHelper {
	/**
	 * 3.jackson第三方的开发包生成json数据
	 * @param studentlist
	 */
	public static void createJson3(List<Student> studentlist) {
		ObjectMapper om=new ObjectMapper();
		//创建一个json数据最外层的
		String json="[]";
		try {
			//读取集合将里面的值转换成字符串
			json=om.writeValueAsString(studentlist);	
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
		System.out.println(json);
	}
}


4.拼接字符串生成json数据
例如:

package com.wangxing.test1;

import java.util.List;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;

public class JsonHelper {
	/**
	 * 4.拼接字符串生成json数据
	 * @param studentlist
	 */
	public static void createJson4(List<Student> studentlist) {
		//创建StringBuilder对象(单线程大量字符串)
		StringBuilder stringBuilder=new StringBuilder();
		stringBuilder.append("[");
		for(Student studentObject:studentlist){
			stringBuilder.append("{");
			stringBuilder.append("\"stuid\":"+studentObject.getStuid()+",");
			stringBuilder.append("\"stuname\":\""+studentObject.getStuname()+"\",");
			stringBuilder.append("\"stuage\":"+studentObject.getStuage()+",");
			//得到地址的数组
			Myaddderss myaddderss[]=studentObject.getAddressliast();
			stringBuilder.append("[");
			for(Myaddderss myaddressObject:myaddderss){
				stringBuilder.append("{");
				stringBuilder.append("\"type\":\""+myaddressObject.getType()+"\",");
				stringBuilder.append("\"address\":\""+myaddressObject.getAddress()+"\",");
				stringBuilder.append("},");
			}
			stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(","));
			stringBuilder.append("]");
			stringBuilder.append("},");
		}
		stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(","));
		stringBuilder.append("]");
		System.out.println(stringBuilder.toString());
	}
}

五、解析Json

1.json-simple-1.1.jar第三方的开发包解析json数据
例如:
  1.1创建和json数据对用的接收数据的类

package com.wangxing.test2;
import java.util.List;

public class Student {
	private int stuid;
	private String stuname;
	private int stuage;
	private Myaddderss addressliast[];
	public int getStuid() {
		return stuid;
	}
	public void setStuid(int stuid) {
		this.stuid = stuid;
	}
	public String getStuname() {
		return stuname;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}
	public int getStuage() {
		return stuage;
	}
	public void setStuage(int stuage) {
		this.stuage = stuage;
	}
	public Myaddderss[] getAddressliast() {
		return addressliast;
	}
	public void setAddressliast(Myaddderss[] addressliast) {
		this.addressliast = addressliast;
	}
}
package com.wangxing.test2;

public class Myaddderss {
	private String type;
	private String address;
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

   1.2创建解析json数据的类

package com.wangxing.test2;

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;

public class JsonHelper {
	/**
	 * 1.json-simple-1.1.jar第三方的开发包解析json数据
	 * @param filename
	 * @return
	 */
	public static List<Student> getStudentList(String filename) throws Exception{
		List<Student> studentlist=new ArrayList<Student>();
		//创建JSONParser对象去读取json数据
		JSONParser jsonParser=new JSONParser();
		//通过JSONParser对象的方法parse读取json文件并返回JSONArray数组
		JSONArray studentListArray=(JSONArray) jsonParser.parse(new FileReader(new File(filename)));
		//遍历得到json数组
		 for(int i=0;i<studentListArray.size();i++){
			//创建student对象
			 Student student=new Student();
			 //得到jsonObject节点对象(可能是对象也可能是数组)
			 JSONObject studentJsonNode=(JSONObject) studentListArray.get(i);
			 long id=(Long) studentJsonNode.get("stuid");
			 int stuid=(int)id;
			 student.setStuid(stuid);
			 String stuname=(String) studentJsonNode.get("stuname");
			 student.setStuname(stuname);
			 long age=(Long)studentJsonNode.get("stuage");
			 int stuage=(int)age;
			 student.setStuage(stuage);
			 JSONArray addressJsonArray=(JSONArray) studentJsonNode.get("addressliast");
			 //创建保存地址对象的数组
			 Myaddderss myaddderssarr[]=new Myaddderss[addressJsonArray.size()];
			 for(int j=0;j<addressJsonArray.size();j++){
				 Myaddderss myaddderss=new Myaddderss();
				 //得到json数组中的节点对象
				 JSONObject addressObject=(JSONObject) addressJsonArray.get(j);
				 String type=(String)addressObject.get("type");
				 String address=(String)addressObject.get("address");
				 myaddderss.setType(type);
				 myaddderss.setAddress(address);
				 myaddderssarr[j]=myaddderss;
			 }
			 student.setAddressliast(myaddderssarr);
			 studentlist.add(student);
		 }
		 return studentlist;
	}
}

   1.3测试

package com.wangxing.test2;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;

public class Mian {
	public static void main(String args[]) throws Exception{
		BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
		System.out.print("请输入要解析的json文件,名称+后缀名:");
		String filename=read.readLine();
		List<Student> studentlist=JsonHelper.getStudentList(filename);
		for(Student student:studentlist){
			Myaddderss myaddderss[]=student.getAddressliast();
			System.out.println("stuid:"+student.getStuid()+" "+"stuname:"+student.getStuname()+
					" "+"stuage:"+student.getStuage()+" "+myaddderss[0].getType()+":"+myaddderss[0].getAddress()+" "
					+myaddderss[1].getType()+":"+myaddderss[1].getAddress());
		}
	}
}

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

package com.wangxing.test2;

import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class JsonHelper {
	/**
	 * 2.gson-2.8.0.jar第三方的开发包解析json数据
	 * @param filename
	 * @return
	 * @throws Exception
	 */
	public static List<Student> getStudentList2(String filename) throws Exception{
		//创建gson对象
		Gson gson=new Gson();
		Type type =new TypeToken<List<Student>>(){}.getType();
		return gson.fromJson(new FileReader(new File(filename)), type);
	}
}

 3.jackson第三方的开发包解析json数据
例如:

package com.wangxing.test2;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonHelper {
    /**
	 * 3.jackson第三方的开发包解析json数据
	 * @param filename
	 * @return
	 * @throws Exception
	 */
	public static List<Student> getStudentList3(String filename) throws Exception{
		List<Student> studentlist=new ArrayList<Student>();
		//得到ObjectMapper对象
		ObjectMapper objectMapper=new ObjectMapper();
		//得到jsonNode节点
		JsonNode studentListArray=objectMapper.readTree(new File(filename));
		for(int i=0;i<studentListArray.size();i++){
			Student student=new Student();
			//得到节点
			JsonNode studentObject=studentListArray.get(i);
			int stuid=studentObject.get("stuid").asInt();
			student.setStuid(stuid);
			String stuname=studentObject.get("stuname").asText();
			student.setStuname(stuname);
			int stuage=studentObject.get("stuage").asInt();
			student.setStuage(stuage);
			JsonNode addressArr=studentObject.get("addressliast");
			Myaddderss myaddderssarr[]=new Myaddderss[addressArr.size()];
			for(int j=0;j<addressArr.size();j++){
				Myaddderss myaddderss=new Myaddderss();
				JsonNode addressObject=addressArr.get(j);
				String type=addressObject.get("type").asText();
				String address=addressObject.get("address").asText();
				myaddderss.setType(type);
				myaddderss.setAddress(address);
				myaddderssarr[j]=myaddderss;
			}
			student.setAddressliast(myaddderssarr);
			studentlist.add(student);
		}
		
		return studentlist;
	}
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序之间的数据传输。在解析JSON文件时,可以使用不同的编程语言和库。 以下是一些常见的JSON解析方法: 1. Java中使用GSON库 GSON是Google提供的Java库,可以将JSON数据转换为Java对象,也可以将Java对象转换为JSON数据。 ```java // 将JSON字符串转换为Java对象 Gson gson = new Gson(); MyObject myObject = gson.fromJson(jsonString, MyObject.class); // 将Java对象转换为JSON字符串 String jsonString = gson.toJson(myObject); ``` 2. Python中使用json模块 Python标准库中的json模块提供了解析生成JSON数据的方法。 ```python import json # 将JSON字符串转换为Python对象 pythonObject = json.loads(jsonString) # 将Python对象转换为JSON字符串 jsonString = json.dumps(pythonObject) ``` 3. JavaScript中使用JSON对象 JavaScript中的JSON对象提供了解析生成JSON数据的方法。 ```javascript // 将JSON字符串转换为JavaScript对象 var jsonObject = JSON.parse(jsonString); // 将JavaScript对象转换为JSON字符串 var jsonString = JSON.stringify(jsonObject); ``` 4. PHP中使用json_decode和json_encode函数 PHP中的json_decode函数可以将JSON数据转换为PHP对象或数组,json_encode函数可以将PHP对象或数组转换为JSON数据。 ```php // 将JSON字符串转换为PHP对象 $phpObject = json_decode($jsonString); // 将PHP对象转换为JSON字符串 $jsonString = json_encode($phpObject); ``` 以上是一些常见的JSON解析方法,不同的编程语言和库可能有一些差异,但大体上都是类似的。在实际应用中,可以根据具体需求选择适合自己的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值