2017-09-18 1 views
0

나는 Flask 및 Mongo DB를 사용하여 Rest API를 구축하고 있습니다.pymongo Flask에서 Json 유효성 확인

pymongo를 사용하여 MongoDB에서 가져온 데이터가 유효한 JSON인지 확실하지 않습니다.

tasks = [ 
{ 
    'id': 1, 
    'title': u'Buy groceries', 
    'description': u'Milk, Cheese, Pizza, Fruit, Tylenol', 
    'done': False 
}, 
{ 
    'id': 2, 
    'title': u'Learn Python', 
    'description': u'Need to find a good Python tutorial on the web', 
    'done': False 
} 
] 


@app.route('/tankover/api/v1.0/posts', methods=['GET']) 
def post(): 
    db = connection.posthub 
    cursor = dumps(db.post.find()) 
    return jsonify({'cursor': cursor}) 

나는 하드 데이터가 단정하고 잘 포맷 보여주는 일 아닌가요 jsonify CODE.

OUTPUT

{ 
"cursor": [ 
    { 
    "description": "Milk, Cheese, Pizza, Fruit, Tylenol", 
    "done": false, 
    "id": 1, 
    "title": "Buy groceries" 
    }, 
    { 
    "description": "Need to find a good Python tutorial on the web", 
    "done": false, 
    "id": 2, 
    "title": "Learn Python" 
    } 
] 
} 

하지만 데이터베이스에서 데이터를 사용하고 있습니다 때. 나는 형식과 포맷을 잘 모르겠습니다.

{ 
"cursor": "[{\"title\": \"sankit\", \"_id\" 
{\"$oid\":\"597619b7c07b2dc30a108def\"}, \"description\": \"hello to 
everyone we are up 
for a great start and moving good\", \"tags\": [\"demo1\", \"demo2\"]}, 
{\"_id\": {\"$oid\": \"59761b2cc6568a4e341b6b89\"}, \"description\": \"lets 
add some thing new\", \"tags\": [\"bonjour\", \"salut\"], \"title\": 
\"hi\"}, 
{\"_id\": {\"$oid\": \"59a5c5f6c6568a0be4447dfb\"}, \"description\": \"okay 
okay okay\", \"tags\": [\"socks\", \"gifts\"], \"title\": \"tinni\"}]" 
} 

유효하고 정상입니까?

+0

을 당신은을 인코딩 더블 있습니다 데이터를'dumps()'와 한 번,'jsonify()'로 한 번. –

+0

만약 내가 jsonify를 사용하는 경우에만 오류가 발생합니다 : 는 JSON을 직렬화 할 수 없으며 만약 덤프에주는 에러가 있다면 : TypeError : 'dict'객체를 호출 할 수 없습니다 –

답변

2

의견 중 하나에서 언급 한대로 dumps을 두 번 호출했습니다. flask.json.jsonify()dumps()을 래핑하는 함수입니다.

pymongo find()은 문서가 아닌 커서 개체를 반환합니다. 예를 들어, 당신은 아래에 시도 할 수 있습니다 : 당신이 MongoDB를 JSON 객체 중 하나를,에는 직렬화하고 싶은 경우

def post(): 
    db = connection.posthub 
    documents = [doc for doc in db.post.find({}, {"_id":0})] 
    return jsonify({'cursor': documents}) 

ObjectId 또는 Date(), 당신은 예를 들어 bson.json_util 활용할 수 있습니다 :

from bson import json_util 

def post(): 
    db = connection.posthub 
    documents = [doc for doc in db.post.find({})] 
    return json_util.dumps({'cursor': documents}) 
+0

나는 이것을 시도하고 있습니다. 형식 오류 : ypeError : ObjectId ('597619b7c07b2dc30a108def')가 JSON을 직렬화 할 수 없습니다. –

+0

귀하의 의견에 답변하기 위해 위 응답을 업데이트했습니다. 간단히 말해, 임의의 파이썬 객체를 직렬화 할 수 없습니다 (인코더/디코더를 제공하지 않음) –

+0

현재 완벽하게 작동하고 있으며 개념을 이해하고 있습니다. 고맙습니다 :) –