7

次のようなサンプル出力でjSONオブジェクトを作成しようとしています

{
    "pickups": [
        {
            "id": " ",
            "name": " ",
            "number": " ",
            "time": " ",
            "status": " "
        },
        {
            "id": " ",
            "name": " ",
            "time": " ",
            "number": " ",
            "status": " "
        }
    ]
}

次のようなサンプル応答を取得しています

  {'status': '1', 'time': datetime.date(2013, 2, 27), 'number': 4L, 'name': u'Dr  John', 'id': 83L}{'status': '1', 'time': datetime.date(2013, 2, 27), 'number': 4L, 'name': u'Ricky', 'id': 84L}

私が試したこと

        pickup_records = []
        for tmpPickUp in pickup:
            pickup_date=tmpPickUp.pickup_date
            pickup_time=tmpPickUp.pickup_time

            pickup_id = tmpPickUp.id
            pickup_name=tmpPickUp.customer_name
            pickup_number=tmpPickUp.pieces
            print pickup_date,pickup_time,pickup_id,pickup_name,pickup_number
            record = {"name":pickup_name, "id":pickup_id,"time":pickup_date,"number":pickup_number,"status":"1"}
            print record
            pickup_records.append(record)

        #pickup_records = json.dumps(pickup_records) 
        pickup_records = json.dumps(pickup_records, indent=4) 
        pickup_response={"pickup":pickup_records}
        return HttpResponse(pickup_response, content_type="application/json") 

編集1

            for tmpPickUp in pickup:
                pickup_date=tmpPickUp.pickup_date
                pickup_time=tmpPickUp.pickup_time

                pickup_id = tmpPickUp.id
                pickup_name=tmpPickUp.customer_name
                pickup_number=tmpPickUp.pieces
                print pickup_date,pickup_time,pickup_id,pickup_name,pickup_number
                record = {"name":pickup_name, "id":pickup_id,"time":pickup_date,"number":pickup_number,"status":"1"}
                print record
                pickup_records.append(record)

            pickup_response={"records":pickup_records}
            print "before pickup+records",pickup_response 
            #pickup_records = json.dumps( pickup_response, sort_keys=True, indent=4)
            print "after pickup+records"  
            #pickup_response={"pickup":pickup_records}
            print "after pickup+response"
            return HttpResponse(pickup_response, content_type="application/json")

ログ応答

before pickup+records {'records': [{'status': '1', 'time': datetime.date(2013, 2, 27), 'number': 4L, 'name': u'Dr Ayurveda Delhi', 'id': 83L}, {'status': '1', 'time': datetime.date(2013, 2, 27), 'number': 4L, 'name': u'Callmate India', 'id': 84L}]}

私は間違いを犯していると思います私をreturn HttpResponse(pickup_response, content_type="application/json")訂正してください

4

4 に答える 4

11

これが最終的な作業コードです

        pickup_dict = {}
        pickup_records=[]


        for tmpPickUp in pickup:
                pickup_date=tmpPickUp.pickup_date
                pickup_time=tmpPickUp.pickup_time

                pickup_id = tmpPickUp.id
                pickup_name=tmpPickUp.customer_name
                pickup_number=tmpPickUp.pieces
                print pickup_date,pickup_time,pickup_id,pickup_name,pickup_number
                record = {"name":pickup_name, "id":pickup_id,"number":pickup_number,"status":"1","time":"time"}
                print record
                pickup_records.append(record)

        pickup_dict["pickup"]=pickup_records


        return JsonResponse(pickup_dict)
于 2013-03-06T11:42:21.637 に答える
2

リストとして宣言していることを確認してからpickup_records、呼び出し方法を確認する必要があると思いますjson.dumps

pickup_records = []
for tmpPickUp in pickup:
    pickup_date=tmpPickUp.pickup_date
    pickup_time=tmpPickUp.pickup_time
    pickup_id = tmpPickUp.id
    pickup_name=tmpPickUp.customer_name
    pickup_number=tmpPickUp.pieces
    print pickup_date,pickup_time,pickup_id,pickup_name,pickup_number
    record = {"name":pickup_name, "id":pickup_id,"time":pickup_date,"number":pickup_number,"status":"1"}
    pickup_records.append(record)
pickup_records = json.dumps({'pickups': pickup_records}, indent=4) 
pickup_response={"pickup":pickup_records}
return HttpResponse(pickup_response, content_type="application/json")

アップデート

私はコンソールで以下を実行しました-(エラーはあなたのTmpPickUpアイテムにあるに違いないと思います)-

>>> import json
>>> records = []
>>> for i in ["","",""]:
...     record = {"name":i, "id":i,"time":i,"number":i,"status":i}
...     records.append(record)
... 
>>> print json.dumps({'pickups': records}, indent=4)
{
    "pickups": [
        {
            "status": "", 
            "time": "", 
            "number": "", 
            "name": "", 
            "id": ""
        }, 
        {
            "status": "", 
            "time": "", 
            "number": "", 
            "name": "", 
            "id": ""
        }, 
        {
            "status": "", 
            "time": "", 
            "number": "", 
            "name": "", 
            "id": ""
        }
    ]
}
于 2013-03-06T06:47:56.297 に答える
0
from django.utils import simplejson

pickup_records = []
for tmpPickUp in pickup:
    pickup_records.append({ "id": tmpPickUp.id })
    pickup_records.append({ "name": tmpPickUp.customer_name })
    pickup_records.append({ "number": tmpPickUp.pieces })
    pickup_records.append({ "time": tmpPickUp.pickup_time })
    pickup_records.append({ "status": "1" })

return HttpResponse(simplejson.dumps(pickup_records, indent=4), 
                    mimetype="application/json") 

または多分これはあなたを助けるでしょう:https ://github.com/praekelt/django-generate

于 2013-03-06T06:53:31.750 に答える
0

最初に、datetime.dateオブジェクト用に独自のシリアライザーを作成する必要があります。

import datetime
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.date):
            return obj.strftime('%m-%d-%Y')
        return json.JSONEncoder.default(self, obj)

その後、それを使用することができます:

json.dumps(d, cls=CustomEncoder)
'{"status": "1", "id": 83, "number": 4, "name": "Dr  John", "time": "02-27-2013"}'

したがって、フィナーレコードは次のとおりです。

resp = [{'status': '1', 'time': datetime.date(2013, 2, 27), 'number': 4L, 'name': u'Dr  John',   'id': 83L}{'status': '1', 'time': datetime.date(2013, 2, 27), 'number': 4L, 'name': u'Ricky', 'id': 84L}]
finale_struct = {'products':[]}
for res in resp:
    finale_struct['products'].append(json.dumps(res, cls=CustomEncoder))
于 2013-03-06T07:25:21.883 に答える