2013-06-21 41 views
0

我是django-tastypie的新手。当我尝试使用下面的代码创建的API,漂亮的json是如何工作的?

class PrettyJSONSerializer(Serializer): 
    json_indent = 4 

     def to_json(self, data, options=None): 
      print '.................' 
      options = options or {} 
      data = self.to_simple(data, options) 
      return simplejson.dumps(data, cls=json.DjangoJSONEncoder, 
            sort_keys=True, ensure_ascii=False, indent=self.json_indent) 


    class ShipmentResource(ModelResource): 
     class Meta: 
      queryset = Shipment.objects.all() 
      serializer = PrettyJSONSerializer() 

,它给下面显示的输出,

{"shipments": [{"awb_bol": "AWB#6", "carrier": "Yellow", "etd_eta": "2013-04-14", "from_to": "KKD-HYD", "id": 1, "mode": "Transport", "pieces": "10.00", "po": "PO-123", "resource_uri": "/api/shipment/1/", "status": "W", "weight": "25.00", "wr": "WR-123"}, {"awb_bol": "BWAB", "carrier": "Green", "etd_eta": "2013-04-23", "from_to": "AMP-HYD", "id": 3, "mode": "Transport", "pieces": "1.30", "po": "OP-123", "resource_uri": "/api/shipment/3/", "status": "O", "weight": "1.40", "wr": "RW 45"}]} 

但我只需要这个甲酸上面的输出,

{ 
    "shipments": [ 
     { 
      "awb_bol": "AWB#6", 
      "carrier": "Yellow", 
      "etd_eta": "2013-04-14", 
      "from_to": "KKD-HYD", 
      "id": 1, 
      "mode": "Transport", 
      "pieces": "10.00", 
      "po": "PO-123", 
      "resource_uri": "/api/shipment/1/", 
      "status": "W", 
      "weight": "25.00", 
      "wr": "WR-123" 
     }, 
     { 
      "awb_bol": "BWAB", 
      "carrier": "Green", 
      "etd_eta": "2013-04-23", 
      "from_to": "AMP-HYD", 
      "id": 3, 
      "mode": "Transport", 
      "pieces": "1.30", 
      "po": "OP-123", 
      "resource_uri": "/api/shipment/3/", 
      "status": "O", 
      "weight": "1.40", 
      "wr": "RW 45" 
     } 
    ] 
} 

是在django-tastypie中可用的任何默认功能。 请解决我的问题。谢谢..

+0

这些是等效的... – HennyH

+0

感谢您的回复。在我的浏览器中,我看到JSON甲酸盐不含新的线条(即;它是线性甲酸盐)。但是我需要用新的线条来合练。 – dhana

+0

根据需要,通常您的浏览器的工作是格式化JSON。如果您使用Chrome,则[JSONView](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc)扩展程序可以很好地执行此操作。我相信其他浏览器也有相同的功能。或者您是否有特定需求让您的JSON包含新行? –

回答

0

要simplejson.dumps添加分隔符= [ ' '':']参数

return simplejson.dumps(data, cls=json.DjangoJSONEncoder, sort_keys=True, ensure_ascii=False, indent=self.json_indent, separators=[',',': '])         

这项工作很好使用标准的Python的JSON库,但他们的相似性,我认为这是一样的。

为了避免页面错误响应,我建议您在页面响应中添加content_type ='application/json'。