【问题标题】:Creating a jSON Array using Django使用 Django 创建 JSON 数组
【发布时间】:2013-02-20 20:10:50
【问题描述】:

我正在尝试使用示例输出创建一个 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")上犯了错误,请纠正我

【问题讨论】:

  • 附加:pickup_records = json.dumps(pickup_records, indent=4)
  • 你不喜欢间距?
  • 你能安排你的forloop吗?

标签: python django json django-views


【解决方案1】:

这是最终的工作代码

        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)

【讨论】:

    【解决方案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": ""
            }
        ]
    }
    

    【讨论】:

    • 您遇到了什么错误?是您遇到问题的布局还是 json 对象本身的结构?
    • 我想它在pickup_records = json.dumps({'pickups':pickup_records}, indent=4) 上面临错误,因为它没有被打印出来
    • (你知道在我的代码或你的代码中那行之后没有打印语句吗?)
    • 这个解决方案有效,我自己用不同的数据集尝试过
    【解决方案3】:

    首先,您应该为 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))
    

    【讨论】:

      【解决方案4】:
      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

      【讨论】:

        猜你喜欢
        • 2015-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多