聊一聊JSON

Posted Java从浅到深

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊一聊JSON相关的知识,希望对你有一定的参考价值。

1

JSON是什么?

好些人对 JSON 还没有一个清晰的认识,今天带大家来认识一下什么是JSON。

有一种叫做JSON (javascript Object Notation) 的轻量级数据交换格式能够替代XML的工作。它就是JSON。

数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小,易于解析这种语言。

客户端JavaScript可以简单的通过eval()进行JSON数据的读取,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,php,Python,Ruby等语言服务器端语言, 便于服务器端的解析。

各语言对JSON支持的特别好,自从Ajax的流行,JSON格式传输就更流行了。JSON常被用作序列化


2

如果到这里你还不明白?

JSON是什么,那么我就发大招了!

其实我在为公司面试的时候,我经常有提到,假如我不知道JSON是个什么玩意?你怎么告诉我,让我知道是个什么东西。(下面都是我的个人理解,因理解因人而异,受用即可!)

问了这么多人,其实结果不是我想要的,大多数的答案有这些。

它是前端和后台交互用的。
它是键值对的。

以上2点比较多。还有一些乱七八糟的完全偏离了JSON。那么它应该是怎样的?应该这么回答,个人认为!

首先,它只是一个字符串,它只是一个有规则的字符串。(重点)然后它的表达(表现)形式是键值对的。其实非常类似Java语言里的Map,Objective-C里的字典,其他语言都有对应的,我说实话其他语言我不知道!

我为什么用MapString泛型,因为理论上它的键值对应该都是字符串,Why?这个问题问的好,我可以这么回答你,因为它本身就是字符串。

上面说的理论上表达方式,那么实际目前我们用到的键值对支持什么呢?可以支持String、Number、Array以及Boolean、null什么的。

它的作用是用来交互的,不一定Web项目的前后端交互也可以接口,配置文件,文件存储等等都OK。目前移动端比较火,一般的项目都会用JSON来传输。


3

它能带来什么?

  • 简洁、简单、体积小等。

  • 上手容易,高效。

  • 跨语言,目前移动端androidios一般项目构造都是其他语言提供接口(JSON方式),移动端读取接口的方式开发。
    ….

4

它和XML对比?

可读性

看了网上的各种帖子,有说可读性相当,不过基本是说XML可读性好,我认为还凑合。可以打平手。

可扩展性

有人说,“XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

不过 JSON在Javascript主场作战,可以存储Javascript复合对象,有着XML不可比拟的优势”。我赞同一半,我觉得这些帖子都是老帖子,XML可以灵活扩展是因为各种语言有支持的其他Jar包,类库等。

但自从JSON火起来后,JSON的支持包,类库等,相信每个语言都很多。像Java就有Jackson、goson、json-lib、FastJson等等多的去了。

编码难度

XML有有DOM,SAX,STAX等解析技术,JSON也有我上面说的那些,都OK。

解码难度

同上。

解码编码效率

呵呵!解析XML有专用CPU、你造吗?


5

DEMO

XML Demo

<country>
    <name>中国name>
    <province>
        <name>黑龙江name>
        <citys>
            <city>哈尔滨city>
            <city>大庆city>
        citys>
    province>
    <province>
        <name>广东name>
        <citys>
            <city>广州city>
            <city>深圳city>
            <city>珠海city>
        citys>
    province>
    <province>
        <name>台湾name>
        <citys>
            <city>台北city>
            <city>高雄city>
        citys>
    province>
    <province>
        <name>新疆name>
        <citys>
            <city>乌鲁木齐city>
        citys>
    province>
country>


JSON Demo


{
    "name""中国"
    "province": [
        {
            "name""黑龙江"
            "citys": {
                "city": [
                    "哈尔滨"
                    "大庆"
                ]
            }
        },
        {
            "name""广东"
            "citys": {
                "city": [
                    "广州"
                    "深圳"
                    "珠海"
                ]
            }
        },
        {
            "name""台湾"
            "citys": {
                "city": [
                    "台北"
                    "高雄"
                ]
            }
        },
        {
            "name""新疆"
            "citys": {
                "city": [
                    "乌鲁木齐"
                ]
            }
        }
    ]
}



6

Java常用的json库

我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式。JSON常被用作序列化。

  • JSON官方

  • GSON

  • FastJSON

  • Jackson


7

总结


当项目没有你接手的时候,没有强行用XML的情况下,你就用JSON,没有其他额外强行规定的情况下,你就用JSON。


本人是在学习Elasticsearch的时候开始强度的接触JSON,可以这么给你形容,如果Elasticsearch返回的是一个XML,估计你要哭,Elasticsearch也要哭,这么和你比较你懂了吗。


以上是关于聊一聊JSON的主要内容,如果未能解决你的问题,请参考以下文章

#聊一聊悟空编辑器# 2022新年的悟空编辑器

简单聊一聊JS中的循环引用及问题

聊一聊Javasript继承

PHP系列直播:从代码细节聊一聊如何成为一名优秀的工程师

聊一聊计算机视觉中常用的注意力机制 附Pytorch代码实现

聊一聊isinstance与type