第十八课时 JSON

一、概念:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");

var p = {"name":"张三","age":23,"gender":"男"};

* json现在多用于存储和交换文本信息的语法
* 进行数据的传输
* JSON 比 XML 更小、更快,更易解析。

二、语法:
1. 基本规则
* 数据在名称键值对中:json数据是由键值对构成的
* 数据由逗号分隔:多个键值对由逗号分隔
* 花括号保存对象:使用{}定义json 格式
* 方括号保存数组:[]
{} 双括号表示对象
[] 中括号表示数组
“” 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {“name”: “Michael”} 可以理解为是一个包含name为Michael的对象
而[{“name”: “Michael”},{“name”: “Jerry”}]就表示包含两个对象的数组
当然了,你也可以使用{“name”:[“Michael”,“Jerry”]}来简化上面一部,这是一个拥有一个name数组的对象
案例
1.基本类型 : JSONObject
{
“name”: “张三”,
“age”: 18,
“sex”:“男”
}

2.数组类型 : JSONArray
[
{
“name”: “张三”,
“age”: 18,
“sex”: “男”
},
{
“name”: “李四”,
“age”: 19,
“sex”:“男”
}
]
3.对象嵌套 :
{
“name”: “teacher”,
“computer”: {
“CPU”: “intel7”,
“disk”: “512G”
},
“students”: [
{
“name”: “张三”,
“age”: 18,
“sex”: “男”
},
{
“name”: “李四”,
“age”: 19,
“sex”: “男”
}
]
}

三、JSON和Java对象之间的转换

1.传统方式——JSONObject、JSONArray:

转JSON:JSONObject.toString();
代码:

//Java对象转为JSON字符串
    @Test
    public  void createJsonString() {
        Person p=new Person();
        p.setSex("男");
        p.setAge(12);
        p.setName("李伟");

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("sex",p.getSex());
        jsonObject.put("age", p.getAge());
        jsonObject.put("name", p.getName());
        String jsonString=jsonObject.toString();
        System.out.println(jsonString);
    }

转Java 对象:
1.基本类型:

 public static Person getPerson(String jsonString) {
        Person person = new Person();
        try {
            JSONObject personObject = new JSONObject(jsonString);
            person.setAge(personObject.getInt("age"));
            person.setName(personObject.getString("name"));
            person.setSex(personObject.getString("sex"));
        } catch (Exception e) {
            // TODO: handle exception
        }
        return person;

    }
主方法:
    public static void main(String[] args) {
        String str = "{\n" +
                "    \"name\": \"张三\",\n" +
                "    \"age\": 18,\n" +
                "\"sex\":\"男\"\n" +
                "}\t";
        Person person = getPerson(str);
        System.out.println(person);

    }

2.数组类型

 public static List getPersons( String jsonString) {
        List list = new ArrayList();//创建一个ArrayList
        try {
            // 返回json的数组
            JSONArray jsonArray = new JSONArray(jsonString);//将jsonString字符串放到jsonArray对象里去
            for (int i = 0; i < jsonArray.length(); i++) {//遍历jsonArray数组
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);//获取jsonArray数组里的每一个对象,并赋给每一个jsonObject2
                Person person = new Person();//通过jsonObject2对象设置Person对象的值
                person.setAge(jsonObject2.getInt("age"));
                person.setName(jsonObject2.getString("name"));
                person.setSex(jsonObject2.getString("sex"));
                list.add(person);//将设置好的person对象加到list里去
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return list;
    }
主方法:
public static void main(String[] args) {
        String str = "[               \n" +
                "        {\n" +
                "            \"name\": \"张三\",\n" +
                "            \"age\": 18,\n" +
                "            \"sex\": \"男\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"李四\",\n" +
                "            \"age\": 19,\n" +
                "            \"sex\":\"男\"\n" +
                "        }\n" +
                "]";
        List list = getPersons(str);
        System.out.println(list);

    }

2.高效方式——GSON:
https://www.cnblogs.com/jianyungsun/p/6647203.html
1.Java对象转JSON:
Gson gson = new Gson();
String json = gson.toJson§;

public  void createJsonString() {
        Person p=new Person();
        p.setSex("男");
        p.setAge(12);
        p.setName("李伟");

        Gson gson = new Gson();
        String json = gson.toJson(p);

        System.out.println(json);
    }

2.Json转Java 对象:
基本类型:
Person p2 = gson.fromJson(json, Person.class)

public static Person getPerson(String jsonString) {
        Gson gson = new Gson();
        Person p2 = gson.fromJson(jsonString, Person.class);
        return p2;

    }
main方法:
Person person=getPerson(str1);
System.out.println(person);

数组类型:
list = gson.fromJson(jsonString, new TypeToken>() {}.getType());

public static List getPersons( String jsonString) {
        Gson gson = new Gson();
        List list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());//记得改泛型<>
        return list;
    }
main方法:
public static void main(String[] args) {
        String str1="{\n" +
                "    \"name\": \"张三\",\n" +
                "    \"age\": 18,\n" +
                "\"sex\":\"男\"\n" +
                "}\t\n";
        String str2 ="[               \n" +
                "        {\n" +
                "            \"name\": \"张三\",\n" +
                "            \"age\": 18,\n" +
                "            \"sex\": \"男\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"李四\",\n" +
                "            \"age\": 19,\n" +
                "            \"sex\":\"男\"\n" +
                "        }\n" +
                "]\n";
        List personList = getPersons(str2);
        System.out.println(personList);
    }

3.高效方式——fastjson:
Java对象转JSON
String json = JSON. toJSONString §;

    public  void createJsonString() {
        Person p=new Person();
        p.setSex("男");
        p.setAge(12);
        p.setName("李伟");

        String json = JSON.toJSONString (p);

        System.out.println(json);
    }

JSON转Java 对象:
基本类型:
Person p2 = JSON. parseObject (json, Person.class)

public static Person getPerson(String jsonString) {
        Gson gson = new Gson();
        Person p2 = gson.fromJson(jsonString, Person.class);
        return p2;

    }
主方法:
Person person=getPerson(str1);

数组类型:
list = JSON.parseArray(jsonstring, Person.class);

public static List getPersons( String jsonString) {
        Gson gson = new Gson();
        List list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());
        return list;
    }
主方法:
    public static void main(String[] args) {
        String str1="{\n" +
                "    \"name\": \"张三\",\n" +
                "    \"age\": 18,\n" +
                "\"sex\":\"男\"\n" +
                "}\t\n";
        String str2 ="[               \n" +
                "        {\n" +
                "            \"name\": \"张三\",\n" +
                "            \"age\": 18,\n" +
                "            \"sex\": \"男\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"李四\",\n" +
                "            \"age\": 19,\n" +
                "            \"sex\":\"男\"\n" +
                "        }\n" +
                "]\n";
        List personList = getPersons(str2);
        System.out.println(personList);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值