您的位置:首页 > 其它

在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'}

])

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐