JSON笔记,用于数据交换

目录

 

JSON的定义

JSON的访问

JSON的两种存在形式

JSON两个常用方法

JSON.stringify( json对象 )

JSON.parse( json字符串 )

JSON在Java中的使用

使用匿名内部类省掉TypeToken类的继承类


  1. JSON的定义

    1. JSON由键值对组成,并且由花括号({})包围。

    2. 每个键由引号引起来,键和值之间使用冒号进行分隔,多组键值对之间使用逗号分隔

    3. 下面分别是int、字符串、布尔类型、数组、集合、JSON数组在JSON中的定义

var jsonObj = {
   "key1" : 12,
   "key2" : "abc",
   "key3" : true,
   "key4" : [11, "arr", false],
   "key5" : {
      "key5_1" : 551,
      "key5_2" : "key5_2_value"
   },
   "key6" : [{
          "key6_1_1" : 6611,
          "key6_6_2" : "key6_1_2_value"
       },{
          "key6_2_1" : 6621,
          "key6_2_2" : "key6_2_2_value"
   }]
};
  1. JSON的访问

    1. JSON本身是一个对象

    2. JSON中的key可以理解为是对象中的一个属性

    3. JSON中的key访问就跟访问对象的属性一样:json对象.key

alert(jsonObj.key1);    // 12
alert(jsonObj.key2);   // abc
alert(jsonObj.key3);   // true
alert(jsonObj.key4);   // 11,arr,false
alert(jsonObj.key5);   // [object Object]
alert(jsonObj.key6);   // [object Object],[object Object]
// 遍历数组
for (var i = 0; i < jsonObj.key4.length; i++) {
   alert(jsonObj.key4[i]);    // 11;arr;false
}
// 访问集合中的元素
alert(jsonObj.key5.key5_1);    // 551
// 访问JSON中的JSON 
var jsonItem = jsonObj.key6[0]; // 先取出JSON中JSON数组的第一个元素(JSON类型的)
alert( jsonItem.key6_1_1 ); // 再输出 6611
  1. JSON的两种存在形式

    1. 形式1:以对象的形式存在,称之为json对象

    2. 形式2:以字符串的形式存在,称之为json字符串

    3. 使用何种形式:

      1. 一般我们要操作JSON中的数据的时候,需要JSON对象的格式

      2. 一般我们要在客户端和服务器之间进行数据交换的时候,使用JSON字符串

  2. JSON两个常用方法

    1. JSON.stringify( json对象 )

      1. 把json对象转化为json字符串

    2. JSON.parse( json字符串 )

      1. 把json字符串转化为json对象

// 将json对象转换为json字符串
var jsonObjString = JSON.stringify(jsonObj);

// 把json字符串转换为json对象
var jsonObj2 = JSON.parse(jsonObjString);
  1. JSON在Java中的使用

    1. 需要gson-2.2.4.jar(谷歌提供)或者其他jar包

    2. 两个方法

      1. toJson()方法:可以把Java对象转换为json字符串

      2. fromJson()方法:可以把json字符串转变为Java对象

    3. 三种情况

      1. javaBean和JSON的互转

      2. List和JSON的互转

      3. Map和JSON的互转

    4. 代码展示

      1. javaBean和JSON的互转

// 1、javaBean和JSON的互转
@Test
public void test1(){
    // 创建一个Java对象
    Person person = new Person(1, "凌晨一点半");
    // 创建Gson对象实例
    Gson gson = new Gson();
    // 转-->:toJson()方法可以把Java对象转换为json字符串
    String persinJsonString = gson.toJson(person);
    // 转<--:fromJson()方法可以把json字符串转变为Java对象
        // 参数1:json字符串; 参数2:转换回去的Java对象的类型(需要.class)
   Person person1 = gson.fromJson(persinJsonString, Person.class);
}
  1. List和JSON的互转

// 2、List和JSON的互转
@Test
public void test2() {
    // 创建一个List
    List<Person> personList = new ArrayList<>();
    personList.add(new Person(1, "凌晨一点四十四"));
    personList.add(new Person(2, "凌晨一点四十五"));

    // 创建Gson对象
    Gson gson = new Gson();

    // 转-->:把List转换为json字符串
    String personListJsonString = gson.toJson(personList);

    // 转<--:把json字符串转换为List
    // List list = gson.fromJson(personListJsonString, personList.getClass());// 这样转会失败,所得到的不是List
    // 写一个类继承TypeToken类,第二个参数创建一个该类的对象,再调用getType()转换类型
    // List list = gson.fromJson(personListJsonString, new PersonListType().getType());
    
    // 使用匿名类可以不用写一个类来继承TypeToken类
    List<Person> list = gson.fromJson(personListJsonString, new TypeToken<List<Person>>(){}.getType());
}

 

public class PersonListType extends TypeToken<ArrayList<Person>> {
    // 需要指定泛型,泛型的类型就是json字符串转换为List时的类型
    // 什么都不用干,只需要设置好泛型类型就可以了
}
  1. Map和JSON的互转

// 3、Map和JSON的互转
@Test
public void  test3(){
    // 创建一个Map
    Map<Integer, Person> personMap = new HashMap<>();
    personMap.put(1, new Person(1, "凌晨2点整"));
    personMap.put(2, new Person(2, "凌晨2点零一分"));

    // 创建一个Gsom实例
    Gson gson = new Gson();

    // 转-->:map转换为json字符串
    String personMapJsonString = gson.toJson(personMap);

    // 转<--:json字符串转换为map
    // 写一个类继承TypeToken类,第二个参数创建一个该类的对象,再调用getType()转换类型
    // Map<Integer, Person> map = gson.fromJson(personMapJsonString, new PersonMapType().getType());

 

public class PersonMapType extends TypeToken<HashMap<Integer, Person>> {
    // 需要指定泛型,泛型的类型就是json字符串转换为Map时的类型
    // 什么都不用干,只需要设置好泛型类型就可以了
}
  1. 使用匿名内部类省掉TypeToken类的继承类

  2. // 使用匿名内部类可以不用写类来继承TypeToken类
        Map<Integer, Person> map = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer,Person>>(){}.getType());
    }
    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值