JSON
来源:互联网 发布:windows loader 2.4 编辑:程序博客网 时间:2024/06/05 23:56
JSON,JavaScript Object Notation,JavaScript对象表示法,一种轻量级的数据交互格式,给网络上传输的数据定义的一种格式。发送者在发送数据之前,根据某种规则将对象序列化为一定格式的字符串后再发送;接收者在接收数据之后,根据同样的规则将字符串反序列化为对象后再处理。
网络通信的本质是不同机器进程之间的通信,内部通过io完成数据交换。io传输的数据只能为二进制字节流,虽可通过包装流来直接传输字符流,但底层仍被转成字节流来传输。发送者在发送数据之前,先将字符串数据转成二进制字节流,如字节数组,称为流化,又叫流处理,序列化,最后通过输出流写出;接收者通过输入流读入二进制字节流,存入字节数组,再转为字符数组或字符串,称为反序列化。
综上的一种网络传输模式为,发送方应用内对象转为json字符串,再转为二进制字节流,并传输;接收方应用接收二进制字节流转为json字符串,再转为应用对象,并处理。
json对象串格式,”{\”k1\” : \”v1\”, \”k2\” : \”v2\”, …}”。
json数组串格式,”[\”v1\”, \”v2\”, …]”。
json串由对象串和数组串嵌套而成,”{\”k1\” : \”v1\”, \”k2\” : {\”k\” : \”v\”, …}, \”k3\” : [\”v\”, {\”k\” : \”v\”, …}]}”。
///////////////// java解析json// google的Gson解析,快速public void parseJson() { String jsonStr = "{\"k\" : [\"v1\", \"v2\"]}"; // JsonReader方式,直接处理串 JsonReader reader = new JsonReader(new StringReader(jsonStr)); //读一个json对象出来,大括号之间的内容 reader.beginObject(); // 遍历其每一个键值对 while (reader.hasNext()) { String key = reader.nextName(); if(key.equals("k")) { // 从其读一个json数组出来,中括号之间的内容 reader.beginArray(); // 遍历其每一个值 while (reader.hasNext()) { // 值是XX类型,类型不匹配会出错 reader.nextXX(); } // 遍历完后关闭数组 reader.endArray(); } } // 遍历完后关闭对象 reader.endObject(); // 遍历完后关闭流 reader.close(); Gson gson = new Gson(); // json对象到pojo User user = gson.fromJson(jsonStr, User.class); // json数组到pojo Type listType = new TypeToken<ArrayList<User>>() {}.getType(); ArrayList<User> listUsers = gson.fromJson(jsonStr, listType); for (int i = 0; i < listUsers.size(); i++) { User user = listUsers.get(i); } // pojo到json对象 String jsonStr = gson.toJson(user); // pojo数组到json数组 String jsonStr = gson.toJson(listUsers, listType);}// 第三方的json-lib,速度不如Gsonpublic void parseJson() { String jsonStr = "{\"k\" : [\"v1\", \"v2\"]}"; // json对象到java对象 JSONObject jsonObject = JSONObject.fromObject(jsonStr); // jsonArray可继续getJSONObject JSONArray jsonArray = jsonObject.getJSONArray("k"); // map到json对象 JSONObject jsonObject = JSONObject.fromObject(map); jsonStr = jsonObject.toString(); // pojo到json对象 JSONObject jsonObject = JSONObject.fromObject(user); jsonStr = jsonObject.toString(); // list到json数组 JSONArray jsonArray = JSONArray.fromObject(list); jsonStr = jsonObject.toString(); // 数组到json数组 JSONArray jsonArray = JSONArray.fromObject(array); jsonStr = jsonObject.toString();}// 第三方的org.jsonpublic void parseJson() { // 用法基本同json-lib,依赖的外部jar包少,轻量级 // 在json与bean的转换上不如json-lib,必须借助map中转}// 阿里的fastjson,据说比Gson还快public void parseJson() { // json对象到bean User user = JSON.parseObject(jsonStr, User.class); // json数组到list List<User> listUsers = JSON.parseArray(jsonStr, User.class); // bean到json对象 String jsonStr = JSON.toJSONString(user); // list到json数组 String jsonStr = JSON.toJSONString(personlist);}
///////////////// js解析json// 无需额外的js包var jsonStr = "{\"k1\" : "v1", \"k2\" : \"v2\"}";var jsonObj = eval( "(" + jsonStr + ")" );// 需要旧版json.js包var jsonObj = JSON.parse(jsonStr);var jsonStr = JSON.stringify(jsonObj);// 需要新版json.js包var jsonObj = jsonStr.parseJSON();var jsonStr = jsonObj.toJSONString();// 直接使用jsonObj.key;jsonObj.key.value;jsonArray[i];// jQuery遍历$.each(jsonObj/jsonArray, function(i, n) { // i当前下标,n对应键值对 n.k; n.v;});
0 0
- Json
- JSON
- JSON
- JSON
- json
- JSON
- JSON
- json
- Json
- json
- JSON
- json
- json
- JSON
- json
- JSON
- JSON
- json
- JVM原理讲解和调优
- mui下拉刷新和上拉加载
- Git学习与训练
- 前端两个页面之间传递值的方法
- Js Switch语句
- JSON
- javascript学习之函数(8)—— 函数 参数传递
- leveldb注释7–key与value
- Docker初识之Centos6.2下安装Docker容器
- 大数据的大公司
- 数组名在作为形参传递时的注意事项
- 程序员修炼之道-从小工到专家读后感
- 2016年年终总结
- centOs下安装jdk