JSON详解

Posted javaxiaobu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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-inf\lib\目录下

将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);

       均为静态方法

以上是关于JSON详解的主要内容,如果未能解决你的问题,请参考以下文章

JSON详解

JSON使用详解

json详解

Json_decode:详解

python json模块详解

json详解