在josnp数据请求中,如何将返回的数据修改成自己需要的格式
2012-06-18 17:36
471 查看
一种是在服务器端设置(用的是django):
1-1.定义Serialize
Python code
# webapp.json.serializer
from django.core import serializers
def Serialize(queryset, root_name=None):
if not root_name:
root_name = queryset.model._meta.verbose_name_plural
return '{"total":
%s, "%s": %s}' %
(queryset.count(), root_name, serializers.serialize('json', queryset))
1-2应用Serialize
Python code
# webapp.jobs.view
from django.http import HttpResponse
from webapp.json.serializer import Serialize
from webapp.jobs.models import Job
def json_job_list(request):
return HttpResponse(Serialize(Job.objects.all(), root_name='job'), mimetype='text/javascript')
————————————————————————————————
2-1或者用此简化方法代替1
Python code
# webapp.genericviews
from django.shortcuts import render_to_response
from django.template import loader, RequestContext
from django.http import HttpResponse
from webapp.json.serializer import Serialize
def json_simple_serialize(request, queryset, root_name=None):
return HttpResponse(Serialize(queryset, root_name=root_name),
mimetype='text/javascript')
2-2.l
Python code
# webapps.jobs.urls
from django.conf.urls.defaults import *
from webapp.genericviews import json_simple_serialize
from webapp.jobs.models import Job
jobs_info_dict = {
'queryset':Job.objects.all(),
'root_name': 'jobs',
}
urlpatterns = patterns('',
(r'json/jobs/', json_simple_serialize, jobs_info_dict),
)
第二种是在前台客户端设置,这里还有两种子方法:
一种是自己写个function,然后套用这个function:
JScript code
Ext.data.DjangoJsonReader = function(meta, recordType){
Ext.data.DjangoJsonReader.superclass.constructor.call(this, meta, recordType);
};
Ext.extend(Ext.data.DjangoJsonReader,
Ext.data.JsonReader, {
readRecords : function(o){
this.jsonData = o;
var s = this.meta;
var sid = s.id;
var recordType = this.recordType,
fields = recordType.prototype.fields;
var totalRecords = 0;
if(s.totalProperty){
var v = parseInt(eval("o." +
s.totalProperty), 10);
if(!isNaN(v)){
totalRecords = v;
}
}
var records = [];
var root = s.root ? eval("o." +
s.root) : o;
for(var i = 0; i < root.length; i++){
var n = root[i];
var values = {};
var id = (n[sid] !== undefined && n[sid]
!== "" ? n[sid] : n['pk']);
for(var j = 0, jlen = fields.length; j < jlen;
j++){
var f =
fields.items[j];
var map =
f.mapping || f.name;
var v =
n['fields'][map] !== undefined ? n['fields'][map] : f.defaultValue;
v = f.convert(v);
values[f.name] = v;
}
var record = new
recordType(values, id);
record.json = n;
records[records.length] =
record;
}
return {
records : records,
totalRecords : totalRecords || records.length
};
}
});
然后套用的时候这样
JScript code
var ds = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url:
"/json/jobs/"}),
reader: new Ext.data.DjangoJsonReader({
root: 'jobs',
totalProperty: 'total'
},
[
{name: 'job_name'},
{name: 'status'}
])
});
另一种是直接应用DjangoJsonReader去读,虽然传过来的格式不符合(你需要的值在子层),但还是有办法读到的
JScript code
ds = new
Ext.data.Store({
proxy: new Ext.data.HttpProxy({url:
"/json/jobs/"}),
reader: new Ext.data.JsonReader({
root: 'jobs',
totalProperty: 'total',
id: 'pk'
},
[
{name: 'job_name', mapping: 'fields.job_name'},
{name: 'status', mapping: 'fields.status'}
])
});
1-1.定义Serialize
Python code
# webapp.json.serializer
from django.core import serializers
def Serialize(queryset, root_name=None):
if not root_name:
root_name = queryset.model._meta.verbose_name_plural
return '{"total":
%s, "%s": %s}' %
(queryset.count(), root_name, serializers.serialize('json', queryset))
1-2应用Serialize
Python code
# webapp.jobs.view
from django.http import HttpResponse
from webapp.json.serializer import Serialize
from webapp.jobs.models import Job
def json_job_list(request):
return HttpResponse(Serialize(Job.objects.all(), root_name='job'), mimetype='text/javascript')
————————————————————————————————
2-1或者用此简化方法代替1
Python code
# webapp.genericviews
from django.shortcuts import render_to_response
from django.template import loader, RequestContext
from django.http import HttpResponse
from webapp.json.serializer import Serialize
def json_simple_serialize(request, queryset, root_name=None):
return HttpResponse(Serialize(queryset, root_name=root_name),
mimetype='text/javascript')
2-2.l
Python code
# webapps.jobs.urls
from django.conf.urls.defaults import *
from webapp.genericviews import json_simple_serialize
from webapp.jobs.models import Job
jobs_info_dict = {
'queryset':Job.objects.all(),
'root_name': 'jobs',
}
urlpatterns = patterns('',
(r'json/jobs/', json_simple_serialize, jobs_info_dict),
)
第二种是在前台客户端设置,这里还有两种子方法:
一种是自己写个function,然后套用这个function:
JScript code
Ext.data.DjangoJsonReader = function(meta, recordType){
Ext.data.DjangoJsonReader.superclass.constructor.call(this, meta, recordType);
};
Ext.extend(Ext.data.DjangoJsonReader,
Ext.data.JsonReader, {
readRecords : function(o){
this.jsonData = o;
var s = this.meta;
var sid = s.id;
var recordType = this.recordType,
fields = recordType.prototype.fields;
var totalRecords = 0;
if(s.totalProperty){
var v = parseInt(eval("o." +
s.totalProperty), 10);
if(!isNaN(v)){
totalRecords = v;
}
}
var records = [];
var root = s.root ? eval("o." +
s.root) : o;
for(var i = 0; i < root.length; i++){
var n = root[i];
var values = {};
var id = (n[sid] !== undefined && n[sid]
!== "" ? n[sid] : n['pk']);
for(var j = 0, jlen = fields.length; j < jlen;
j++){
var f =
fields.items[j];
var map =
f.mapping || f.name;
var v =
n['fields'][map] !== undefined ? n['fields'][map] : f.defaultValue;
v = f.convert(v);
values[f.name] = v;
}
var record = new
recordType(values, id);
record.json = n;
records[records.length] =
record;
}
return {
records : records,
totalRecords : totalRecords || records.length
};
}
});
然后套用的时候这样
JScript code
var ds = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url:
"/json/jobs/"}),
reader: new Ext.data.DjangoJsonReader({
root: 'jobs',
totalProperty: 'total'
},
[
{name: 'job_name'},
{name: 'status'}
])
});
另一种是直接应用DjangoJsonReader去读,虽然传过来的格式不符合(你需要的值在子层),但还是有办法读到的
JScript code
ds = new
Ext.data.Store({
proxy: new Ext.data.HttpProxy({url:
"/json/jobs/"}),
reader: new Ext.data.JsonReader({
root: 'jobs',
totalProperty: 'total',
id: 'pk'
},
[
{name: 'job_name', mapping: 'fields.job_name'},
{name: 'status', mapping: 'fields.status'}
])
});
相关文章推荐
- ajax请求返回Json格式数据如何循环输出成table形式
- ajax请求返回Json格式数据如何循环输出成table形式
- 如何将ajax请求返回的Json格式数据循环输出成table形式
- 如何将ajax请求返回的Json格式数据循环输出成table形式
- ajax请求返回Json格式数据如何循环输出成table形式
- 如何指定struts2返回我们需要的json类型数据?
- 使用charles对app请求进行抓包,请求断点,修改请求与返回的数据,重新发送请求
- Laravel框架实现修改登录和注册接口数据返回格式的方法
- django通过ajax发起请求返回JSON格式数据的方法
- 关于Excel操作编写的一个软件设计构思案例[连载] --如何打开Excel文件,获取需要列的数据显示到表格内做修改
- IOS请求php返回的数据JSON数据无法正确解析 utf-8格式
- soapUI发送post请求json格式,返回请求数据为空
- fiddler4修改请求和返回数据
- 如何在Crystal Portlet中正确返回JSON数据给AJAX请求?
- spring mvc接收参数方式,json格式返回请求数据
- 通过soap请求webservice时,返回的数据是XML类型,有时候也需要解析本地的xml数据等,苹果自带类NSXMLParser解析xml还是很方便的,简单轻便
- Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
- SSH:Struts2的Action如何返回JSON格式的数据?
- 解决layui中table异步数据请求不支持自定义返回数据格式的问题
- PHP如何返回json格式的数据