博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
json,map与list简单理解
阅读量:4298 次
发布时间:2019-05-27

本文共 2726 字,大约阅读时间需要 9 分钟。

json只是特殊的字符串,json字符串采用map键值对的形式,又区别于map,map键值对采用等号关联。json字符串,json数组,json对象又有什么区别呢,举个栗子。

   json字符串(前后端交互常采用的通信格式):“{ "employees": [ {"firstName": "Bill", "lastName":Gates" }, { "firstName":"George", "lastName": "Bush"}, { "firstName": "Thomas",  "lastName": "Carter"}]}”

注意 json字符串只是一堆字符拼接没有换行格式。用“”包围起来

json对象是什么?

      {

            "firstName": "Bill",
            "lastName": "Gates"
        }

用大括号包围的具体格式的对象。

json数组是什么?(⊙o⊙)…,本质就是数组。具体一点,就是由json对象为元素构成的数组,如下:

[

        {
            "firstName": "Bill",
            "lastName": "Gates"
        },
        {
            "firstName": "George",
            "lastName": "Bush"
        },
        {
            "firstName": "Thomas",
            "lastName": "Carter"
        }
    ]

我们可以发现,json数组用【】包围起来了。

前端收到json字符串,可以转化成json对象,进行取值操作。直接操作json字符串麻烦。

前端发送json数据时,首先拼接json对象,然后把发送的json对象转化为json字符串的形式发送。

后台收到json字符串,转化成json对象,进行取值操作。

同样,后台发送json数据,首先拼接json对象,然后把发送的json对象转化为json字符串的形式发送。

那么如何构造json对象呢,最简单的方法,采用map+list的构造方法来生成复杂的数据形式,然后采用

String jsonString = JSON.toJSONString(map);

直接将map转化为json字符串。

另一种方法引入fastjson第三方包,直接建立json对象。

JSONObject object = new JSONObject();  //创建Json对象object.put("username", "张三");         //设置Json对象的属性object.put("password", "123456");System.out.println(object.toString());  //调用toString方法将json对象转换成json字符串

那么如何解析json字符串呢?后台fastjson解析详见

前端json字符串解析,使用JSON.parse()和eval()即可,详见

举个实例:

前端ajax请求返回最简单的json字符串

 

前台ajax请求返回字符串数组:

{"total":3,"rows":[{"companyId":"0001","machineNumOff":0,"companyName":"苏宁","machineNumAll":5,"visitorNumToday":3010,"visitorNumAll":310,"machineNumOn":5},{"companyId":"0002","machineNumOff":0,"companyName":"中山陵","machineNumAll":4,"visitorNumToday":3009,"visitorNumAll":309,"machineNumOn":4},{"companyId":"0003","machineNumOff":0,"companyName":"总统府","machineNumAll":4,"visitorNumToday":3009,"visitorNumAll":309,"machineNumOn":4}]}

格式化后:

{

    "total": 3,
    "rows": [{
        "companyId": "0001",
        "machineNumOff": 0,
        "companyName": "苏宁",
        "machineNumAll": 5,
        "visitorNumToday": 3010,
        "visitorNumAll": 310,
        "machineNumOn": 5
    }, {
        "companyId": "0002",
        "machineNumOff": 0,
        "companyName": "中山陵",
        "machineNumAll": 4,
        "visitorNumToday": 3009,
        "visitorNumAll": 309,
        "machineNumOn": 4
    }, {
        "companyId": "0003",
        "machineNumOff": 0,
        "companyName": "总统府",
        "machineNumAll": 4,
        "visitorNumToday": 3009,
        "visitorNumAll": 309,
        "machineNumOn": 4
    }]
}

解析取出数据:

可见取出数据的方式多种多样,个人建议使用

    var companyone2 = response["rows"][0]["companyId"];     全用中括号,不容易混淆

关于 dataType=“json”

之前写ajax的时候,一直都是用的dataType="text",然后解析的时候用 eval() 。也就是执行完的返回结果是String类型的,然后用Jquery的 eval函数再解析字符串型的json。

使用JQuery的ajax中,dataType返回数据使用json,后台传过来的一定是严格的JSON格式的字符串,然后解析成json对象!

也就是说必须要这种格式的:

"{ "键" : "值" , "键" : "值" } "

 

另外:map与list的区别是什么,记住下面的总结:map是双列集合,每个节点有键有值,键为string,值为任何类,这就为拼接复杂数据形式提供了前提。list是单列集合,每个节点只有值,值是任何类,不过list有索引值。

 

List特点:有序,有索引,元素可以重复。 

实现List接口的类:ArrayList、Vector、LinkedList

Set特点:无序,无索引,元素不可以重复。

实现Set接口的类:HashSet、TreeSet、LinkedHashSet

具体操作见 

 

转载地址:http://qxnws.baihongyu.com/

你可能感兴趣的文章
C++ STL之正则表达式
查看>>
超强vim配置文件[转]
查看>>
Vim代码补全插件YouCompleteMe的自动化安装[转]
查看>>
虚函数的实调用与虚调用
查看>>
memcpy与memmove区别和实现
查看>>
DNS域名解析过程
查看>>
IP、TCP、UDP首部详解
查看>>
move和forward源码分析[转]
查看>>
智能指针之make_unique与make_shared
查看>>
使用智能指针的注意事项
查看>>
C++之失控指针、迷途指针、野指针、悬浮指针及空指针[转]
查看>>
C++之RAII机制[转]
查看>>
printf格式化输出符号详细说明[转]
查看>>
最长回文子串:Manacher算法[转]
查看>>
shared_ptr线程安全性分析[转]
查看>>
为什么多线程读写shared_ptr要加锁?[转]
查看>>
C++之friend关键字
查看>>
C++之operator关键字[转]
查看>>
Java的反射机制
查看>>
Java的内省机制
查看>>