本文共 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/