Json

JavaScript Object Notation javascript表示对象的一种方式
基于JavaScript语言的轻量级的数据交换格式;即:用来传输数据的一种格式.不管是web应用,还是android应用,现在传输数据的方式更多是采用json的格式。我们来对比下json同XML的差别

Android也已经内置了对json解析的支持,所以不需要导入jar包。
需要的jar包:
两个类:

  • 当json字符串以”{“开始,用JSONObject解析
  • 当json字符串以”[“开始,用JSONArray解析

JSONObject
|–getString(String key)根据键找到对应该的值
|–getInt(String key) 得到int类型的值
|–getJSONObject(String key)得到JSONObject
|–put(String key,String/Boolean/Object^^)
构造方法
|–new JSONObject(String source) 把对应的String类型的JSON数据转成JSON的对象
|–new JSONObject(Object bean) 将bean对象转成Json对象,用于转成json字符串

JSONArray|--getJSONObject(int index);|--length()
构造方法|--new JSONArray(Collection list)|--new JSONArray(String jStr)特点{}----遇到{}用JSONObject[]----遇到[]用JSONArray解析用带参构造创建对象组装用空参构造创建对象

下面用一个Demo来演示下Json解析

车类

public class Car {private String brand; //车型private String color;//车的颜色private int price; //车的价钱public Car(String brand, String color, int price) { //有参构造super();this.brand = brand;this.color = color;this.price = price;}public Car() {//无参构造super();// TODO Auto-generated constructor stub}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}@Overridepublic String toString() { //重写toStringreturn "Car [brand=" + brand + ", color=" + color + ", price=" + price+ "]";}}

车展的类

import java.util.List;public class ShowObj {private String address;//车展的地址private String time; //车展示的时间private List<Car> carList; //车展中的众多车的集合public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public List<Car> getCarList() {return carList;}public void setCarList(List<Car> carList) {this.carList = carList;}@Overridepublic String toString() {return "ShowObj [address=" + address + ", time=" + time + ", carList="+ carList + "]";}}
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;//new Car("宝马","150","red");
/** json字符串:* 1.表示对象*  {brand:'宝马',color:'red',price:150}* 2.表示数组*  [{brand:'宝马',color:'red',price:150},{brand:'路虎',color:'black',price:180},{brand:'法拉利',color:'yellow',price:200}]* * 3.表示复杂的对象* Engine engine = new Engine("华为","400");* Car car = new Car("宝马", "red", 150, engine );* * {brand:'宝马',color:'red',price:150,engine:{company:'华为',horsePower:'400'}}* * 4.表示含有数组或者集合的对象:比如说描述车展:车展的地点,车展的时间,车展的参展车型* {address:'深圳湾体育馆',time:'2016-10-1',cars:[{brand:'宝马',color:'red',price:150},{brand:'路虎',color:'black',price:180},{brand:'法拉利',color:'yellow',price:200}]}* * * 总结:* json对象用{},看见{}就是json对象* json数组[],看见[]就是json对象组成的数组********************************************************* xml:<car><brand>宝马</brand><color>red</color><price>150</price></car>*jso和xml的区别:----面试*json数据量小,可读性差。只用于保存数据*xml数据量大,可读性好。可以用于软件配置和布局绘制***********************************************************json解析三种:原生解析(最灵活,步骤繁杂)/fastjson/gson()**1.原生解析*步骤:*  导入jar包*  看见{},创建JSONObject对象*  看见[],创建JsonArray对象*** */public class Json2ObjDemo {public static void main(String[] args) throws JSONException {testObject(); //对象的json数据解析testArray(); //数组的Json数据解析testFuZa(); //复杂Json数据解析}// 解析对象 private static void testObject() throws JSONException {String jsonStr = "{brand:'宝马',price:150,clr:'red'}";// 1.解析简单对象:参数是要解析的字符串JSONObject jObject = new JSONObject(jsonStr);// 2.解析Car car = new Car();String brand = jObject.getString("brand");car.setBrand(brand);car.setColor(jObject.getString("clr"));car.setPrice(jObject.getInt("price"));System.out.println(car);}}// 解析数组private static void testArray() throws JSONException {String jsonString = "[{brand:'宝马',color:'red',price:150},{brand:'路虎',color:'black',price:180},{brand:'法拉利',color:'yellow',price:200}]";//这里我们看到以"["开头那么果断new一个JSON的数组JSONArray jArray = new JSONArray(jsonString);// System.out.println(jArray.length());List<Car> carList = new ArrayList<>();for (int i = 0; i < jArray.length(); i++) {//通过遍历获取每个对象JSONObject jObject = jArray.getJSONObject(i);Car car = new Car();car.setBrand(jObject.getString("brand"));car.setColor(jObject.getString("color"));car.setPrice(jObject.getInt("price"));carList.add(car);//添加到车集}System.out.println(carList);}// 解析含有数组或者集合的对象private static void testFuZa() throws JSONException {/*这个json数据相对复杂 可以看做一个对象中除了自己的普通成员变量外还嵌套了一个Car类型的的集合,从这里的分析我们可以创建好类也就是ShowObj中定义一个Car集的原意*/String jString = "{address:'深圳湾体育馆',time:'2016-10-1',cars:[{brand:'宝马',color:'red',price:150},{brand:'路虎',color:'black',price:180},{brand:'法拉利',color:'yellow',price:200}]}";//将要解析的JSON字符串JSONObject jsonObject = new JSONObject(jString); //看见"{"所以我们new一个JSONObject类ShowObj sObj = new ShowObj(); //创建出车展的对象//将获取的地址为车站对象初始化sObj.setAddress(jsonObject.getString("address"));//将获取的车展时间为车站对象初始化sObj.setTime(jsonObject.getString("time"));// 先获得json数组对象JSONArray jArray = jsonObject.getJSONArray("cars");//这里通过jsonObject获取一个对象数组接下来就是遍历这个数组中的每个对象然后获取每个对象的值List<Car> carList = new ArrayList<>();//创建一个Car集for (int i = 0; i < jArray.length(); i++) {JSONObject jObject = jArray.getJSONObject(i);//获取的一个JSON对象Car car = new Car();//new一个车car.setBrand(jObject.getString("brand"));//为这个车赋值car.setColor(jObject.getString("color"));//为这个车赋值car.setPrice(jObject.getInt("price"));//为这个车赋值carList.add(car);//每得到一个车就添加到list中}sObj.setCarList(carList);//设置车站的车集属性//至此一个相对复杂的JSON数据就解析完成了我们打印下结果
//这里主要的思想是观察JSON数据的结构创建相应类用于保存数据 System.out.println(sObj);}

读者可能会想这么麻烦竟然JAVA采用面向对象的思想那么有没有更快捷的工具类为我们提供解析呢? 肯定有 == 下面我们来看看更快速的解析

Gson

public class Car { //车类private String brand; //车型private String color; //车颜色private double price; //车价格private Prduct engine; //车的引擎public Prduct getEngine() {return engine;}public void setEngine(Prduct engine) {this.engine = engine;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public Car(String brand, String color, double price) {super();this.brand = brand;this.color = color;this.price = price;}@Overridepublic String toString() {return "Car [brand=" + brand + ", color=" + color + ", price=" + price+ ", engine=" + engine + "]";}}
public class Prduct { //车引擎产地private String company;private String horsePower;public String getCompany() {return company;}public void setCompany(String company) {this.company = company;}public String getHorsePower() {return horsePower;}public void setHorsePower(String horsePower) {this.horsePower = horsePower;}@Overridepublic String toString() {return "Prduct [company=" + company + ", horsePower=" + horsePower+ "]";}}
import java.util.List;public class Show {private String address; //车展的地址private String time; //车展时间private List<Car> cars; // 对象名要跟String中一样public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public List<Car> getCars() {return cars;}public void setCars(List<Car> cars) {this.cars = cars;}@Overridepublic String toString() {return "Show [address=" + address + ", time=" + time + ", cars=" + cars+ "]";}}
import java.util.List;import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;public class goson1 {public static void main(String[] args) {// 解析對象jsonString json = "{brand:'宝马',color:'red',price:150,engine:{company:'华为',horsePower:'400'}}";Gson gson = new Gson();Car c = gson.fromJson(json, Car.class);System.out.println(c);// 解析數組jsonString json2 = "[{brand:'宝马',color:'red',price:150},{brand:'路虎',color:'black',price:180},{brand:'法拉利',color:'yellow',price:200}]";TypeToken<List<Car>> typeToken = new TypeToken<List<Car>>() {};List<Car> list = gson.fromJson(json2, typeToken.getType());System.out.println(list);// 混合型
String json3 ="{address:'深圳湾体育馆',time:'2016-10-1',cars:[{brand:'宝马',color:'red',price:150},{brand:'路虎',color:'black',price:180},{brand:'法拉利',color:'yellow',price:200}]}";Show show = gson.fromJson(json3, Show.class);System.out.println(show);}}
public static void main(String[] args) {//解析對象jsonString json = "{brand:'宝马',color:'red',price:150,engine:{company:'华为',horsePower:'400'}}";Gson gson = new Gson();Car c = gson.fromJson(json, Car.class);System.out.println(c);//解析數組jsonString json2 = "[{brand:'宝马',color:'red',price:150},{brand:'路虎',color:'black',price:180},{brand:'法拉利',color:'yellow',price:200}]";TypeToken<List<Car>> typeToken = new  TypeToken<List<Car>>(){};List<Car> list = gson.fromJson(json2, typeToken.getType());System.out.println(list);//混合型String json3 = "{address:'深圳湾体育馆',time:'2016-10-1',cars:[{brand:'宝马',color:'red',price:150},{brand:'路虎',color:'black',price:180},{brand:'法拉利',color:'yellow',price:200}]}";Show show =gson.fromJson(json3, Show.class);System.out.println(show);}

通过以上代码我们发现Gson的解析异常方便 这里总结下它的用法:

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
需要jar包:> **用法:**Gson gson=new Gson()1) fromJson(String json,Class<T>.class)把JSON转成对应的对象【注意】:类和属性和json的键要对应2) fromJson(String json,new TypeToken<List<Person>>() {}.getType())把JSON转成集合3) toJson(Object obj) 把任何对象转成JSON

使用Gson要注意的一点,这里的list集合的车集合对象名一定要和要解析的json数据对应否则list将获取不到数据比如这里的:

private List<Car> cars ; //对象名要跟String中一样

FAST-JSON

那么讲完JSON GSON解析,下面讲解下阿里云提供的API FASTJSON

先看他的方法

Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。// 把JSON文本parse为JavaBean
public static final <T> T parseObject(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final <T> List<T> parseArray(String text, Class<T> clazz);// 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object); 

我们发现这里的方法都是静态的所以我们不需要创建fastjson对象直接类名.方法调用 ,当然它的用法跟Gson累死不够效率却高了许多,至于内部实现暂时不研究。。。
具体的用法读者可自行研究一下。今天的分享就到此~

Json、Gson、FAST-JSON解析学习相关推荐

  1. Andorid中使用Gson和Fast-json解析库解析JSON数据---第三方库学习笔记(二)

    JSON介绍: JSON:JavaScript对象表示法 JSON是存储和交换文本信息的语法. 特点: JSON是轻量级的文本数据交换格式 JSON独立于语言和平台 JSON具有自我描述性,更易理解 ...

  2. Android中的JSON解析方式:json; Gson ; Fastjson

    本文主要介绍Json数据的解析 ----a,json数据的介绍 ----b,json数据的解析 ----c,gson数据的解析,谷歌公司的一种格式 ----d,fastjson数据的解析,阿里巴巴的一 ...

  3. Android 数据解析——Gson与json

    查看json数据详情链接:https://www.json.cn/ 相比json解析,Gson解析更高效简洁 先看看json解析 JSONObject object = new JSONObject( ...

  4. Gson解析json对象,json数组

    String jsonStr 为 {    "error": 0,    "msg": "成功",    "result" ...

  5. 【4-8】《XML与JSON》——XML、解析XML、SAX、DOM4J、XStream、JSON、Gson、Fastjson

    文章目录 XML与JSON 一.XML 1.XML概述 1.XML语法格式 2.语法进阶CDATA(了解) 2.解析XML 1.SAX解析 2.DOM解析 3.JDOM解析 4.DOM4J解析 3.D ...

  6. GSON 解析json 无需在手动解析实体类

    实体类的父类 该类下 Json2bean 是把json转成实体类 Json2ListBean 吧json转成 list<实体类> GSON使用注意项 :json属性名和实体的属性名必须一致 ...

  7. JSON三种数据解析方法

    JSON数据现在是我们开发中用的最多的,百分之九十的数据都是通过JSON方式进行传输,那么想要学好JSON解析就要了解什么是JSON数据,怎么快速解析它从而提升开发效率. 1 什么是JSON数据? 先 ...

  8. pythonos pathjson_Python Json数据文件操作原理解析

    引言 接口测试就是数据的测试,在测试之前,需要准备好测试数据,而测试数据可以用数据库.excel.txt和csv方式,当然还有一种方式,那就是使用json文件来储存测试数据.常用的方式就是这些. 设计 ...

  9. Python解析json字符串,json字符串用法

    json数据简介 json数据是一个轻量级的数据交换格式,采用完全独立于语言的文本格式,这些特性使json称为理想的数据交换语言,易于人阅读和编写,同时易于机器解析和生成. json中的字符集必须是U ...

最新文章

  1. 《编程导论(Java)#183;1.4.1 范式》
  2. 跟我极速尝鲜 Spring Boot 2.3
  3. Restic 跨平台加密备份工具
  4. 桌面没有计算机图标6,我的电脑图标没了怎么办
  5. Linux从入门到入土①(Linux概述、文件系统、VIM编辑器)
  6. Matlab2016A安装步骤
  7. 索尼计算机bios正确设置,索尼笔记本bios设置图解教程 索尼bios设置图解教程
  8. 关于 ZVT 的后期蜈蚣打发研究
  9. XCode11中The app delegate must implement the window property if it wants to use 如何解决
  10. FPGA学习-rom只读存储器(嵌入式块应用)
  11. 微信小程序 车轮之 滑动删除
  12. js中判断数据类型的方法
  13. 轻轻松松实现本地和云主机之间的文件上传下载
  14. 【强化学习论文合集】二十九.2021国际机器学习大会论文(ICML2021)
  15. Linux内存和CPU压测工具
  16. 对人的外部评价与内部评价
  17. JavaScript:HTML中的UI->标签
  18. 使用朴素贝叶斯进行问卷分析(C++)
  19. Linux图形化界面如何全屏
  20. 什么是信息安全服务资质

热门文章

  1. 【DIY】送给儿子的礼物——DIY故事机(音乐播放器)
  2. 13.MATLAB的while、for、break、continue循环操作
  3. 【cisco下针对冗余链路故障备份的处理措施】
  4. 使用Java connector消费ABAP系统的函数
  5. 014PHP基础知识——流程控制(二)
  6. Linux系统安全审计工具Lynis
  7. JS 全局对象 全局变量 作用域 (改自TOM大叔博文)
  8. 使用PHP往Windows系统中添加用户
  9. PAT甲级1129 Recommendation System:[C++题解]统计前k个商品
  10. GRE写作-政府官员必须执行人民意愿还是独立决策?