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
原创粉丝点击