进一步尝试在后段发送json数据,在前端通过ajax获取,经过多次尝试发现,在cent OS上面和在PC上面,表现是不一样的,所以还是要多次尝试,找到其中的规律,并一一记录下来。
1. json发送普通的字典
这种是最简单,发动最简单的键值对,也是最基本的功能,网上最基本的教程就是这样
发送一个charts_name字典,字典内是字符串,最简单的格式
charts_name = {'chart1_name':'大灯材质图','chart2_name':'大灯材质分布图'}
datas = {'charts_name':charts_name}
content = json.dumps(datas, ensure_ascii=False)
发动成功,接收成功
2. json发送列表
item_name和item_value两个列表
item_name = ['LED', '卤素', '氙气']
item_value = ['266', '126', '15']
datas = {'item_name': item_name, 'item_value': item_value}
content = json.dumps(datas, ensure_ascii=False)
发动成功,接收成功
3. json发送字典+列表组合
这是真正应用比较多的场合,字典+列表本质上还是一元组合,深度为1
charts_name = {'chart1_name':'大灯材质图','chart2_name':'大灯材质分布图'}
item_name = ['LED', '卤素', '氙气']
item_value = ['266', '126', '15']
datas = {'item_name': item_name, 'item_value': item_value,
'car_prosys_name': car_prosys_name,'charts_name':charts_name}
发动成功,接收成功
4. json发送字典+列表+列表字典组合
这属于高级应用了,列表字典深度已经到达了2
charts_name = {'chart1_name':'大灯材质图','chart2_name':'大灯材质分布图'}
item_name = ['LED', '卤素', '氙气']
item_value = ['266', '126', '15']
car_prosys_name = ['德系', '日系', '自主', '美系', '韩系', '法系']
car_prosys_value = [{'LED': ['266', '126', '15', '15', '15', '15']},
{'卤素': ['266', '126', '15', '15', '15', '15']},
{'氙气': ['266', '126', '15', '15', '15', '15']}]
datas = {'charts_name':charts_name,
'item_name': item_name, 'item_value': item_value,
'car_prosys_name': car_prosys_name,'car_prosys_value': car_prosys_value}
结果,发送成功,接收解析出错,这个深度为2的列表字典识别成为对象。
在网上搜了一下,有个办法可以解决,就是ajax中把traditional属性设置为true。
果然这就是深度解析json的方法。
接下来我试了其它各种组合,在traditional:true的情况下,都是可以的。
5. 总结
JSON进行前后端数据交互时,对于深度超过1的数据,必须将traditional设置为true。一篇意义一般的记录,但是耽误了我不少时间。