将Python数据库结果集合成json

时间:2014-02-25 17:17:14

标签: python json

我想将数据库结果集转换为json。

我使用json.dumps()它转换为"{key:\"value\"}"但我不想在字符串和反斜杠周围引用。我如何转换为{key:"value"}

这是我的代码。

模型

class DeviceDetail(models.Model):
    deviceId = models.CharField(max_length=200)
    payload = models.CharField(max_length=2000)

查看

data = json.dumps(list(DeviceDetail.objects.filter(deviceId=deviceId).values('deviceId','payload')))

HttpResponse(data)

响应

[
  {
    "deviceId":"10",
   "payload":"{key:\"value\"}"
  },
  {
   "deviceId":"10",
   "payload":"{key:\"value\"}"
  },
  {
   "deviceId":"10",
   "payload":"\"{key:\\\"value\\\"}\""
  },
  {
   "deviceId":"10",
   "payload":"{key:\"value\"}"
  }
]

没有json.dumps()

{'deviceId': u'10', 'payload': u'{key:"value"}'}

1 个答案:

答案 0 :(得分:2)

您的payload值已编码字符串,并且这些值再次编码为JSON字符串。

如果你想要那些是JSON对象,你首先必须将它们解码为Python对象:

data = json.dumps([
    {'deviceId': dd['deviceId'], 'payload': json.loads(dd['payload'])}
    for dd in DeviceDetail.objects.filter(deviceId=deviceId).values('deviceId','payload')
])

我假设这些值是实际的JSON编码值。

如果它们不是 JSON编码值,则不清楚您想要什么。作为字符串,它们的JSON编码是完全正确的,并且值中的引号必须使用反斜杠进行转义。