JSON 入门

JSON 入门

尽管XML拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的Web应用中,开发者经常为XML的解析伤透了脑筋,无论是服务器端生成或处理XML,还是客户端用JavaScript解析XML,都常常导致复杂的代码,极低的开发效率。

现在,JSON为Web应用开发者提供了另一种数据交换格式。让我们来看看JSON到底是什么,同XML相比,JSON提供了更好的简单性和灵活性。

JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。

JSON数据格式

和XML一样,JSON也是基于纯文本的数据格式。由于JSON天生是为JavaScript准备的,因此,JSON的数据格式非常简单,您可以用JSON传输一个简单的String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object对象。

String的完整表示结构:

1

Number可以根据整型或浮点数表示如下:

2

Boolean类型表示为true或false。此外,JavaScript中的null被表示为null,注意,true、false和null都没有双引号,否则将被视为一个String。

JSON对象

Object对象在JSON中是用{}包含一系列无序的Key-Value键值对表示的,实际上此处的Object相当于Java中的Map

{"city":"ChengDu","street":"抚琴西路","postcode":610000}

复杂的JSON对象:

{"name":"XiaoMing","address":
    {"city":"ChengDu","street":"抚琴西路","postcode":610000}
}

JSON数组

JSON也可以表示一个数组对象,使用[]包含所有元素,每个元素用逗号分隔,元素可以是任意的Value。

示例:

["abc",12345,false,null]

复杂的JSON数组:

[{"name":"XiaoMing","address":
    {"city":"ChengDu","street":"抚琴西路","postcode":610000}
},
 {"name":"LaoWang","address":
    {"city":"ChengDu","street":"抚琴南路","postcode":610000}
}]

服务器端输出JSON格式数据

以Java为例,将String对象编码为JSON格式:

    /**
     * 将字符串转换为JSON格式数据
     * 
     * @param src
     *            字符串
     * @return JSON格式字符串
     */
    public String string2Json(String src) {
        StringBuilder sb = new StringBuilder(src.length() + 20);
        sb.append('\"');
        for (int i = 0; i < src.length(); i++) {
            char c = src.charAt(i);
            switch (c) {
            case '\"':
                sb.append("\\\"");
                break;
            case '\\':
                sb.append("\\\\");
                break;
            case '/':
                sb.append("\\/");
                break;
            case '\b':
                sb.append("\\b");
                break;
            case '\f':
                sb.append("\\f");
                break;
            case '\n':
                sb.append("\\n");
                break;
            case '\r':
                sb.append("\\r");
                break;
            case '\t':
                sb.append("\\t");
                break;
            default:
                sb.append(c);
            }
        }
        sb.append('\"');
        return sb.toString();
    }

将数组编码为JSON格式:

    public String toJson(Object o) {
        if (o == null)
            return "null";
        if (o instanceof String)
            return string2Json((String) o);
        if (o instanceof Object[])
            return array2Json((Object[]) o);
        // …………
        throw new RuntimeException("Unsupported type: " + o.getClass().getName());
    }

    public String array2Json(Object[] array) {
        if (array.length == 0)
            return "[]";
        StringBuilder sb = new StringBuilder(array.length << 4);
        sb.append('[');
        for (Object o : array) {
            sb.append(toJson(o));
            sb.append(',');
        }
        // 将最后添加的 ',' 变为 ']':
        sb.setCharAt(sb.length() - 1, ']');
        return sb.toString();
    }

JSON已经是JavaScript标准的一部分。目前,主流的浏览器对JSON支持都非常完善。应用JSON,我们可以从XML的解析中摆脱出来,对那些应用Ajax的Web 2.0网站来说,JSON确实是目前最灵活的轻量级方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值