JSON详解

JSON对象

JSON:JavaScript对象表示法(JavaScript Object Notation)跨语言使用

json   基本类型 {“key”:value, “key”:value……}

       数组类型 {[{“key”:value },{ key”:value }……]} 在打印中大括号没显示

       基本类型与数组类型能够相互嵌套

{

"name": "teacher",

"computer": {

"CPU": "intel7",

"disk": "512G"

},

"students": [

{

"name": "张三",

"age": 18,

"sex": true

},

{

"name": "李四",

"age": 19,

"sex": false

}

]

}

注意:  存储结构是KEY-VALUE

keystring类型

value:String Boolean Number 数组 Object null

Json 串以{开始,以}结尾;

Json 串中数组是以[开始,以]结尾;

Json 串中 Object 是以{开始,以}结尾

由于json中存在双引号,手动拼接json对象需要对引号进行转义

gson解析处理

google提供的类库,将JSON字符串与java对象转换

将架包设置在web项目的 web-inflib目录下

将java对象转为Json字符串

首先获取对象,再将对象转为字符串

对象也可以是数组和容器对象

String json引用=new Gson().toJson(对象);

或者预先对转换器进行声明

Gson gson=new Gson();

String json引用=gson.toJson(对象);

User user = new User(1,"zhangsan","123123");

String json = new Gson().toJson(user);

System.out.println(json);

将Json字符串转为java对象

直接转换

       先创建转换器

       Gson gson = new Gson();

       根据数组还是对象执行不同的参数

1     Json字符串为单一javabean对象

       类名 对象引用=gson.fromJson(jsonstr, 对象引用.class)

Gson gson = new Gson();      

User user = gson.fromJson(json, User.class);

//采用user接收json字符串的,参数为用来接收的反射类

(注意,接收对象的javabean需要空构造)

2     Json字符串为一维数组 数组内无多层嵌套

       容器<范型> 引用=

gson.fromJson(jsonstr,new TypeToken<容器<范型>>(){}.getType());

String json2 = "["aaa","bbb","bbb"]";

Gson gson = new Gson();

List<String> list =

gson.fromJson(json2, new TypeToken<List<String>>(){}.getType());

//通过list容器存储

若Json字符串为多个对象的数组,将范型改为对应的对象类

String json3 = "[{"userId":1,"userName":"zhangsan","userPwd":"123123"},{"userId":2,"userName":"lisi","userPwd":"111111"},{"userId":3,"userName":"wangwu","userPwd":"234567"}]";

Gson gson = new Gson();

List<User> userList =

gson.fromJson(json3, new TypeToken<List<User>>(){}.getType());

       若存在多层嵌套可以在接收对象中存在参数为容器,才能存储

节点解析

1获取解析器

JsonParser parser = new JsonParser();

2json字符串转为JsonElement对象

JsonElement element= parser.prese(jsonstr);

3获取节点,解析节点

    获取根节点;再在根节点的基础上获取各个节点;若节点为可取值节点则进行取值

根节点的获取

JsonObject root = element.getAsJsonObject();根节点为对象

根节点若为数组的情况通过Array进行接收

下级节点的获取

JsonObject 子节点= 父节点.getAsJsonObject(“key”);

JsonPrimitive 子节点= 父节点.getAsJsonPrimitive(“key”);

JsonArray 子节点=父节点.getAsJsonArray(“key”);

节点的取值

    JsonPrimitive类型

    String name = primitive2.getAsString();

    boolean flag = primitive.getAsBoolean();

通过各数据类型的getAs数据类型()方法获取值

    JsonObject 类型

       通过javabean接收

       User user = new Gson().fromJson(userObject, User.class);

    JsonArray类型

       通过容器接收.同上

   

节点概念

Gson的节点对象:

JsonElement    所有的节点都是JsonElement 对象

JsonPrimitive  基本的数据类型的节点对象

JsonNull      代表空节点对象,即 有 key,value 为空

JsonObject    对象数据类型的节点对象

JsonArray     数组数据类型的节点对象

JsonElement的取值:

1   JsonPrimitive  value的取值对应 java 的

int,double,float,long,short,boolean,char,byte,String,

BigDecimal,BigI nteger,Number

2   JsonObject    value 的取值对应 java 的 Object 对象.

3   JsonArray     value 的取值对应 java 的 List 及其子类对象.

注:数组节点也能通过增强for遍历进行处理

for (JsonElement user : jsonArray) {

UserBean userBean =

new Gson().fromJson(user, new TypeToken<UserBean>() {}.getType());}

FastJson解析处理

对象转字符串

对象转json通过静态方法实现

JSON.toJSONString(对象)        使用所有对象

json字符串转对象

对象       通过JSON.parseObject()方法

UserBean user=JSON.parseObject(jsonstr, UserBean.class )

容器(数组)     通过JSON.parseArray ()方法

List<String> list = JSON.parseArray(json2, String.class);

List<User> userList = JSON.parseArray(json3, User.class);

       均为静态方法

原文地址:https://www.cnblogs.com/javaxiaobu/p/11136150.html