JSON

  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,速度不如Gson
public 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.json
public 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值