【已解决】Flask中如何解析已得到的JSON字符串中的参数

之前折腾过Flask-restful中,利用:

reqparse.RequestParser()

和add_argument

然后去实现参数解析。

现在(通过websocket)得到一个json字符串,比如:

{
     "longitude" : 31.2639030000,
     "latitude" : 120.7297170000,
     "shortStr" : "星湖街134号",
     "fullStr" : "江苏省苏州市吴中区星湖街134号"
}

想要看看能否借用RequestParser去解析出对应的参数

flask parse parameter from json

python – flask – how to get parameters from a JSON GET request – Stack Overflow

http://stackoverflow.com/questions/26069714/flask-how-to-get-parameters-from-a-json-get-request

Parser attempts to parse json arguments for GET requests · Issue #148 · flask-restful/flask-restful

19.2. json — JSON encoder and decoder — Python 3.5.2 documentation

【总结】

最后还是自己去使用json转换为dict变量,自己实现参数的解析了:

def strToJson(jsonStr):
    jsonDict = json.loads(jsonStr, encoding="utf-8")
    gLog.debug("jsonStr=%s, jsonDict=%s", jsonStr, jsonDict)
    return jsonDict
def wsParseMessage(messageStr):
    messageDict = strToJson(messageStr)
    gLog.debug("messageStr=%s, messageDict=%s", messageStr, messageDict)
    (parseOk, msgDictOrFailReason) = (False, "Unknown reason")
    if ("type" in messageDict) and \
        ("id" in messageDict) and \
        ("event" in messageDict) and \
        ("data" in messageDict) :
        parseOk = True
        msgDictOrFailReason = messageDict
    else:
        parseOk = False
        msgDictOrFailReason = "Invalid message format"
    gLog.debug("parseOk=%s, msgDictOrFailReason=%s", parseOk, msgDictOrFailReason)
    return (parseOk, msgDictOrFailReason)
def wsProcessMessage(messageDict):
    gLog.debug("messageDict=%s", messageDict)
    msgType = messageDict["type"]
    msgId = messageDict["id"]
    msgEvent = messageDict["event"]
    msgData = messageDict["data"]
    gLog.debug("msgType=%s, msgId=%s, msgEvent=%s, msgData=%s", msgType, msgId, msgEvent, msgData)
    gLog.debug("type(msgData)=%s", type(msgData))
    if msgType == "User":
        userId = msgId
        gLog.debug("userId=%s", userId)
        curUser = User.query.filter_by(id=userId).first()
        gLog.debug(‘curUser=%s’, curUser)
        if curUser is None:
            return (False, "invalid user id %s"%(userId))
        if msgEvent == "SaveLocation":
            locationDataDict = msgData
            gLog.debug("locationDataDict=%s", locationDataDict)
            if ("longitude" in locationDataDict) and \
                    ("latitude" in locationDataDict) and \
                    ("shortStr" in locationDataDict) and \
                    ("fullStr" in locationDataDict):
                gLog.debug("old location curUser.location=%s", curUser.location)
                curUser.location.longitude = locationDataDict["longitude"]
                curUser.location.latitude = locationDataDict["latitude"]
                curUser.location.shortStr = locationDataDict["shortStr"]
                curUser.location.fullStr = locationDataDict["fullStr"]
                db.session.commit()
                gLog.debug("new location curUser.location=%s", curUser.location)
                return (True, "save user %s new location ok"%(userId))
            else:
                return (False, "Invalid location format for %s"%(locationDataDict))
        else:
            return (False, "Unsupport user %s event %s"%(userId, msgEvent))
    else:
        return (False, "Unsupport type %s" % (msgType))
            (isValidMessage, messageDictOrFailReason) = wsParseMessage(unicodeMsg)
            gLog.debug("isValidMessage=%s, messageDictOrFailReason=%s", isValidMessage, messageDictOrFailReason)
            if isValidMessage:
                (processOk, respMsgOrFailReason) = wsProcessMessage(messageDict=messageDictOrFailReason)
                gLog.debug("processOk=%s, respMsgOrFailReason=%s", processOk, respMsgOrFailReason)


发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量