2020蓝旭工作室暑假讨论班之JSON解析

JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人的编写和阅读,也易于机器解析。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JAVA开发中使用GSON

因为json有2种类型:

  • 一种是对象,object -> {key:value,key:value,…} 。
  • 另一种是数组,array -> [value,value,…] 。

所以针对这两种类型,来展开对json数据的操作。GSON在解析json的时候,大体上有2种类型,一种是直接在内存中生成object或array,通过手工指定key来获取值;另一种是借助javabean来进行映射获取值。我们主要采用第二种使用javabean来进行映射获取。

1.对json进行反序列化得到java对象

通用示例

Gson gson = new Gson();
BeanType bean = gson.fronJson(jsonData, BeanType.class);

具体例子
Java实体类

package entity;

public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

利用User类来解析json

package jsontest;

import com.google.gson.Gson;
import entity.User;

public class JsonToObjectDemo {
    public static void main(String[] args){
        Gson gson = new Gson();
        String jsonString = "{\"username\":\"tom\",\"password\":\"123456\"}";
        System.out.println(jsonString);
        User tom = gson.fromJson(jsonString,User.class);
        System.out.println(tom.toString());
    }
}

1.1如果字段名并不一致怎么办?
如果前端传过来的json 数据的key和我们java类的字段不一致,就需要我们在java类中手工进行指定。
比如将username改成userName,这个时候我们可以使用@SerializedName("userName")注解来实现。

public class User {
    @SerializedName("userName")
    private String username;
    private String password;
}

1.2如果不想某些字段不参加序列化后者反序列化
如果想要让java类的某些字段不参加序列化或反序列化,可以使用@Expose()注解来实现

@Expose
    @SerializedName("userName")
    private String username;

    @Expose(serialize = false,deserialize = false)
    private String password;

利用Java数组来解析json数组

对于数组形式的json数据,我们还可以反序列化为List类型的数组。因为List进行增删改都比较方便。

package jsontest;

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

import java.lang.reflect.Type;
import java.util.List;

public class JsonArrayToList {
    public static void main(String[] args){
        String jsonString = "[\n" +
                "    {\n" +
                "        \"username\": \"tom\",\n" +
                "        \"password\": \"123456\"\n" +
                "    },\n" +
                "    {\n" +
                "        \"username\": \"tony\",\n" +
                "        \"password\": \"1234567\"\n" +
                "    }\n" +
                "]";
        Gson gson = new Gson();
        Type type = new TypeToken<List<User>>(){}.getType();
        List<User> userList = gson.fromJson(jsonString,type);
    }
}

2.由java对象序列化为JSON
我们可以直接把java对象给序列化为json数据。对于未设置的属性,会采取默认值;但是如果默认是null的话,该属性就不会被序列化。

package jsontest;

import com.google.gson.Gson;
import entity.User;

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

public class ListToJsonDemo {
    public static void main(String[] args){
        User tom = new User();
        User tony = new User();
        tom.setUsername("tom");
        tom.setPassword("123456");
        tony.setUsername("tony");
        tony.setPassword("1234567");
        List<User> userList = new ArrayList<>();
        userList.add(tom);
        userList.add(tony);
        Gson gson = new Gson();
        String jsonString = gson.toJson(userList);
        System.out.println(jsonString);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值