JSON和XML真正在进行数据交换时候,它们存在的形式就是一个很长的字符串,这个字符串在网络 中传输或者存储于磁盘等介质中。在传输和存储之前需要把JSON对象转换成为字符串才能传输和存 储,这个过程称之为“编码”过程。接收方需要将接收到的字符串转换成为JSON对象,这个过程称之 为“解码”过程。编码和解码过程就像发电报时发送方把语言变成能够传输的符号,而接收时要将符号 转换成为能够看懂的语言。
流程图如下:
介绍一下JSON对象与JSON字符串区别:
JSON对象:
var person={"name":"zhangsan","sex":"男","age":"24"}//json对象 alert(person.name);//zhangsan alert(typeof person);//object
JSON字符串:
var person='{"name":"zhangsan","sex":"男","age":"24"}';//json字符串 alert(person);//{"name":"zhangsan","sex":"男","age":"24"} alert(typeof person);//string
由于目前Java官方没有提供JSON编码和解码所需要的类库,所以需要使用第三方JSON库。
下载完成之后,我们需要把报导入到IDEA:
第一步:创建org.json包
在src文件夹中右击new,选择Package,然后输入包名称org.json。
第二步:复制源代码文件
将下载好的JSON-java库里面的所有文件全部复制到org.json中
下面开始JSON数据解码与编码
先看编码:
如果想获得如下这样JSON字符串:
{"a":[1,2,3],"name":"tony","age":30}
实现编码过程,参考代码如下:
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.Arrays; import java.util.List; /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/2/20 * @time : 10:01 下午 */ //如果想得到JSON字符串{"a":[1,2,3],"name":"tony","age":30},要编码 public class HelloWorld { public static void main(String[] args) { try { JSONObject object = new JSONObject(); object.put("name","tony"); object.put("age",30); // 第一种加入列表方式 // List<Integer> integers = Arrays.asList(1,2,3); // object.put("a",integers); // 第二种加入列表方式 JSONArray jsonArray = new JSONArray(); jsonArray.put(1).put(3); object.put("a",jsonArray); // 编码完成 System.out.println(object.toString()); } catch (JSONException e) { e.printStackTrace(); } } }
就可以得到上面的运行结果
再看解码:解码过程是编码反向操作,如果有如下JSON字符串
{"a":[1,2,3],"name":"tony","age":30}
JSON字符串解码成JSON对象或数组,参考代码如下:
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/2/20 * @time : 11:17 下午 */ //解码过程是编码的反向操作 public class HelloWorld { public static void main(String[] args) { // 声明一个json字符串 String jsonString = "{\"a\":[1,2,3],\"name\":\"tony\",\"age\":30}"; try { JSONObject object = new JSONObject(jsonString); System.out.println(object); String name = object.getString("name"); System.out.println("name : "+name); int age = object.getInt("age"); System.out.println("age : "+age); JSONArray jsonArray = object.getJSONArray("a"); int n1 = jsonArray.getInt(0); System.out.println("数组a的第一个元素:"+n1); int n2 = jsonArray.getInt(1); System.out.println("数组a的第二个元素:"+n1); }catch (JSONException e){ e.printStackTrace(); } } }
运行结果:
{"a":[1,2,3],"name":"tony","age":30} name : tony age : 30 数组a的第一个元素:1 数组a的第二个元素:1