JSON使用
一.JSON 描述
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
二.语法规则
1.JSON是由‘名称/值’对组成的集合,’名称/值‘格式例如,“key1”:value1。
2.JSON的值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。
3.JSON有两种结构,一种是对象,另一种是数组。
三.重点讲解
org.json.JSONArray。这是一个处理json中数组的类,org.json.JSONObject。这是一个处理json对象的类,用这两个类基本就可以进行json数据与Java对象之间的转换了。JSONObject的常用构造器如下:
(1)JSONObject()空构造器:
JSONObject(JSONObject jo, java.lang.String[] names)接受一个JSONObject对象和一个json名称数组
JSONObject(java.util.Map<?,?> map)接受一个Map
JSONObject(java.lang.Object bean)接受一个javaBean
JSONObject(java.lang.Object object, java.lang.String[] names)接受一个Java对象,指定名称数组
JSONObject(java.lang.String source)接收json格式的文本
(2)JSONObject中的常用方法介绍一下:
append(java.lang.String key, java.lang.Object value) 这是向json中的数组添加元素的方法
put(java.lang.String key, boolean value) 添加一个名称/值对到JSONObject对象中。值可以是boolean,Collection,double,int,long,Map,Object类型的
remove(java.lang.String key) 移除指定名称的名称/值对
get(java.lang.String key) 获取指定名称的名称/值对,名称不存在抛出异常
opt(java.lang.String key) 也是获取指定名称的名称/值对,但是如果名称不存在,不会抛出异常,会返回一个默认值
(3)JSONArray中的常用方法:
get(int index) 获取指定下标的元素,不存在则抛出异常
opt(int index) 获取指定下标的元素,不存在不抛出异常,返回默认值
put(boolean value) 添加一个元素,可取boolean,Collection,double,int,long,map,Object
put(int index, int value) 在指定下标处添加一个元素,如果指定的下标小于最大值,则会进行替换,如果大于最大值,则会添加元素,在指定下标与原来最大下标之间(如果间隔大于1)会用null填充
remove(int index) 移除指定下标的元素,返回移除的元素或者是null
(4)下面是一个JavaBean转换为json文本的例子:
public class Message { private int code; private String date; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getDate() { return date; } public void setDate(String date) { this.date = date; }
public class App{ public static void main(String[] args) { Message msg = new Message(); msg.setCode(200); msg.setMsg("successed"); SimpleDateFormat spf = new SimpleDateFormat("yyyy/MM/dd"); Date date = new Date(); String format = spf.format(date); msg.setDate(format); System.out.println(new JSONObject(msg)); } }
public class App { public static void main(String[] args) { String s = "{\r\n" + " \"name\": \"中国\",\r\n" + " \"province\": [{\r\n" + " \"name\": \"黑龙江\",\r\n" + " \"cities\": {\r\n" + " \"city\": [\"哈尔滨\", \"大庆\"]\r\n" + " }\r\n" + " }, {\r\n" + " \"name\": \"广东\",\r\n" + " \"cities\": {\r\n" + " \"city\": [\"广州\", \"深圳\", \"珠海\"]\r\n" + " }\r\n" + " }, {\r\n" + " \"name\": \"台湾\",\r\n" + " \"cities\": {\r\n" + " \"city\": [\"台北\", \"高雄\"]\r\n" + " }\r\n" + " }, {\r\n" + " \"name\": \"新疆\",\r\n" + " \"cities\": {\r\n" + " \"city\": [\"乌鲁木齐\"]\r\n" + " }\r\n" + " }]\r\n" + "}"; JSONObject jsonObj = new JSONObject(s); // 获取中国 System.out.println("获取中国 = " + jsonObj.getString("name")); // 省数组 JSONArray arr = jsonObj.getJSONArray("province"); System.out.println("省数组 = " + arr); // 黑龙江省 jsonObj = arr.getJSONObject(0); System.out.println("黑龙江省" + jsonObj); // 黑龙江省名字 String name2 = jsonObj.getString("name"); System.out.println("黑龙江省名字 = " + name2); // 黑龙江省城市数组 arr = jsonObj.getJSONObject("cities").getJSONArray("city"); System.out.println("黑龙江省城市数组" + arr); } }