使用Python美化JSON输出并从输出中删除此\“

时间:2018-02-10 05:31:01

标签: python json

我从函数中得到了这个JSON:

output = user_schema.dump(users).data
output = json.dumps([dict(r) for r in output], default=alchemyencoder)
print output

return jsonify({'user' : output})

alchemyencode看起来像这样:

def alchemyencoder(obj):
"""JSON encoder function for SQLAlchemy special classes."""
if isinstance(obj, datetime.date):
    return obj.isoformat()
elif isinstance(obj, decimal.Decimal):
    return float(obj)

我的输出如下:

 {  "user": "[{\"latitude\": 28.6167, \"admin_name1\": \"New Delhi\", \"key\": \"IN/110051\", \"longitude\": 77.2167, \"place_name\": \"Azad Nagar\"}]" }

我想从输出中删除\“并美化我的JSON看起来像这样:

user:
   {
         latitude : 23.233,
         longitude :24.223,
         place : "xyz"
   }

2 个答案:

答案 0 :(得分:2)

你的问题是:

output = json.dumps([dict(r) for r in output], default=alchemyencoder)

已经创建了一个JSON字符串

然后将该json字符串放在dict中,然后再次序列化

return jsonify({'user' : output})

这些反斜杠转义是必要的,因为结果:

 {  "user": "[{\"latitude\": 28.6167, \"admin_name1\": \"New Delhi\", \"key\": \"IN/110051\", \"longitude\": 77.2167, \"place_name\": \"Azad Nagar\"}]" }

JSON对象是一个键值对,用户和字符串,而不是JSON对象数组。

只需忽略json.dumps行,只需返回:

return json.dumps({'user':[dict(r) for r in output]}, default=alchemyencoder)

答案 1 :(得分:1)

import json

# Using the string provided in your example
j = '{  "user": "[{\"latitude\": 28.6167, \"admin_name1\": \"New Delhi\", \"key\": \"IN/110051\", \"longitude\": 77.2167, \"place_name\": \"Azad Nagar\"}]" }'

j = j.replace('"[','[').replace(']"',']')

print(json.dumps(json.loads(j), indent=2))
{
  "user": [
    {
      "latitude": 28.6167,
      "admin_name1": "New Delhi",
      "key": "IN/110051",
      "longitude": 77.2167,
      "place_name": "Azad Nagar"
    }
  ]
}