java数据交换格式—Json详解


一、什么是数据交换格式

客户端与服务器常用数据交换格式xml、json、html

二、数据交换格式使用场景

1、移动端(安卓、IOS)通讯方式采用http协议+JSON格式 走restful风格。
2、很多互联网项目都采用Http协议+JSON
3、因为xml比较重,WebService服务采用http+xml格式, 银行项目使用比较多!

移动端和PC端服务器是接口是怎么设计的?

画图演示

Java通过接口物品交换 java数据交换平台_json


三、JSON简单使用

什么是JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过JSON来进行交换。
JSON样例:

{
    "name": "王永圣",
    "age": "21",
    "details": [
        {
            "sex": "男",
            "url": "http://www.wangys.xin"
        }
    ]
}

JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON的形式是用大括号“{}”包围起来的项目列表,每一个项目间用逗号(,)分隔,而项目就是用冒号(:)分隔的属性名和属性值。这是典型的字典表示形式,也再次表明javascript里的对象就是字典结构。不管多么复杂的对象,都可以用一句JSON代码来创建并赋值。
在JSON中,名称 / 值对包括字段名称(在双引号中),后面写一个冒号,然后是值。

JSON格式的分类

JSON有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构!

1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 [“java”,”javascript”,”vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

经过对象、数组2种结构就可以组合成复杂的数据结构了。

常用JSON解析框架

fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带)

使用fastjson解析json

添加jar fastjson-1.1.43.jar 或引入maven依赖

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.43</version>
</dependency>

使用fastjson api

// 把JSON文本parse为JSONObject或者JSONArray 
public static final Object parse(String text); 
// 把JSON文本parse成JSONObject    
public static final JSONObject parseObject(String text); 
// 把JSON文本parse为JavaBean 
public static final <T> T parseObject(String text, Class<T> clazz);
// 把JSON文本parse成JSONArray 
public static final JSONArray parseArray(String text); 
//把JSON文本parse成JavaBean集合 
public static final <T> List<T> parseArray(String text, Class<T> clazz); 
// 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object); 
// 将JavaBean序列化为带格式的JSON文本
public static final String toJSONString(Object object, boolean prettyFormat);  
//将JavaBean转换为JSONObject或者JSONArray。
public static final Object toJSON(Object javaObject);

解析json

public class JsonTest001 {

    /**
     *  定义一个json字符串
     */
    public static String strJson="{\"age\":\"21\",\"details\":[{\"sex\":\"男\",\"url\":\"http://www.wangys.xin\"}],\"name\":\"王永圣\"}";

    public static void main(String[] args) {
        // 将json字符串转为jsonbject
        JSONObject jsonObject = JSONObject.parseObject(strJson);
        //用key值获得value值
        String age = jsonObject.getString("age");
        String name = jsonObject.getString("name");
        System.out.println(name+"---"+age);
        //解析json里的数组
        JSONArray details = jsonObject.getJSONArray("details");
        //循环遍历
        for(Object object:details){
            //按索引循环取数组里的json对象
            JSONObject stObject = (JSONObject) object;
            //用key值获得value值
            String sex = stObject.getString("sex");
            String url = stObject.getString("url");
            System.out.println(sex+"---"+url);
        }

    }

}

运行结果:

Java通过接口物品交换 java数据交换平台_java数据交换格式_02

Json转对象

定义类:

//定义user类
public class User {

    private String id;
    private String name;
    private List<Item> items;

    public String getId() {

        return id;
    }

    public void setId(String id) {

        this.id = id;
    }

    public String getName() {

        return name;
    }

    public void setName(String name) {

        this.name = name;
    }

    public List<Item> getItems() {

        return items;
    }

    public void setItems(List<Item> items) {

        this.items = items;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", items=" + items + "]";
    }

}

//定义Item类
class Item {
    private String itemId;
    private String itemName;

    public String getItemId() {

        return itemId;
    }

    public void setItemId(String itemId) {

        this.itemId = itemId;
    }

    public String getItemName() {

        return itemName;
    }

    public void setItemName(String itemName) {

        this.itemName = itemName;
    }

    @Override
    public String toString() {
        return "Item [itemId=" + itemId + ", itemName=" + itemName + "]";
    }

}

json转换对象demo

public class jsonToObject {
    public static String json="{\"id\":\"01\",\"items\":[{\"itemId\":\"20\",\"itemName\":\"美团外卖\"},{\"itemId\":\"30\",\"itemName\":\"饿了么\"}],\"name\":\"张三\"}";

    public static void main(String[] args) {
        //json转换对象
        User test = new JSONObject().parseObject(json, User.class);
        System.out.println(test.toString());
    }
}

运行结果:

Java通过接口物品交换 java数据交换平台_Java通过接口物品交换_03

组装json
Json api封装json
public static void main(String[] args) {
        // 1.json api 封装json
        JSONObject root = new JSONObject();
        root.put("id", "01");
        root.put("name", "大圣");
        JSONArray arrayList = new JSONArray();
        JSONObject object1 = new JSONObject();
        object1.put("itemId", "20");
        object1.put("itemName", "美团外卖");
        JSONObject object2 = new JSONObject();
        object2.put("itemId", "30");
        object2.put("itemName", "饿了么");
        arrayList.add(object1);
        arrayList.add(object2);
        root.put("items", arrayList);
        System.out.println(root.toJSONString());
    }

运行结果:

Java通过接口物品交换 java数据交换平台_json_04

将对象转换成json字符串
public static void main(String[] args) {
        User user = new User();
        user.setId("01");
        user.setName("大圣");
        List<Item> items =new ArrayList<Item>();
        Item item1 = new Item();
        item1.setItemId("20");
        item1.setItemName("美团外卖");
        Item item2 = new Item();
        item2.setItemId("30");
        item2.setItemName("饿了么");
        items.add(item1);
        items.add(item2);
        user.setItems(items);
        System.out.println(JSON.toJSONString(user));

    }

运行结果:

Java通过接口物品交换 java数据交换平台_JSON_05