Get rid of Mongo $ signs in JSON

前端 未结 2 1899
鱼传尺愫
鱼传尺愫 2021-01-21 00:36

I am building python backend for SPA (Angular) using MongoDB.

Here is what I use: Python 3.4, MongoDB 3, Flask, flask-mongoe

2条回答
  •  轮回少年
    2021-01-21 00:56

    If you are confident you want to get rid of all the similar cases, then you can certainly write code that matches that pattern. For example:

    info = [
        {
            "_id": {
                "$oid": "55c737029380f82fbf52eec3"
            },
            "created_at": {
                "$date": 1439129906376
            },
            "desc": "Description.....",
            "title": "This is title"
        },
        #etc...
    ]
    
    def fix_array(info):
        ''' Change out dict items in the following case:
               - dict value is another dict
               - the sub-dictionary only has one entry
               - the key in the subdictionary starts with '$'
            In this specific case, one level of indirection
            is removed, and the dict value is replaced with
            the sub-dict value.
        '''
        for item in info:
            for key, value in item.items():
                if not isinstance(value, dict) or len(value) != 1:
                    continue
                (subkey, subvalue), = value.items()
                if not subkey.startswith('$'):
                    continue
                item[key] = subvalue
    
    fix_array(info)
    print(info)
    

    This will return this:

    [{'title': 'This is title', 'created_at': 1439129906376, 'desc': 'Description.....', '_id': '55c737029380f82fbf52eec3'}]
    

    Obviously, reformatting that with JSON is trivial.

提交回复
热议问题