当前位置: 首页 > 面试题库 >

如何使用Python在Redis中存储复杂的嵌套JSON

祁嘉木
2023-03-14
问题内容

由于我是Redis的新手,因此我需要一些有关如何在REDIS中存储以下复杂json的指导,以便我们可以从REDIS中访问JSON的元素-

"Reservations": [
        {
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
                    },
                    "PublicDnsName": "",
                    "State": {
                        "Code": 16,
                        "Name": "running"
                    },
                    "EbsOptimized": "false",
                    "LaunchTime": "xxxxxxxxx",
                    "PrivateIpAddress": "x.x.x.x",
                    "ProductCodes": [],
                    "VpcId": "xxxxx",
                    "StateTransitionReason": "",
                    "InstanceId": "i-xxxxxxx",
                    "EnaSupport": "true",
                    "ImageId": "ami-xxxxx",
                    "PrivateDnsName": "ip-xxxxxx.ec2.internal",
                    "KeyName": "xxxxxxv",
                    "SecurityGroups": [
                        {
                            "GroupName": "xxx",
                            "GroupId": "sg-xxxx"
                        },
                        {
                            "GroupName": "xxxxxx",
                            "GroupId": "sg-xxxxx"
                        },
                        {
                            "GroupName": "xxxxx",
                            "GroupId": "sg-xxxxxx"
                        },
                        {
                            "GroupName": "xxxxx",
                            "GroupId": "sg-xxxxxx"
                        }
                    ],
                    "ClientToken": "xxxxx",
                    "SubnetId": "subnet-xxxxx",
                    "InstanceType": "t2.micro",
                    "NetworkInterfaces": [
                        {
                            "Status": "in-use",
                            "MacAddress": "xxxxxxxx",
                            "SourceDestCheck": "true",
                            "VpcId": "vpc-xxxxx",
                            "Description": "",
                            "NetworkInterfaceId": "eni-xxxxx",
                            "PrivateIpAddresses": [
                                {
                                    "PrivateDnsName": "ip-xx-ec2.internal",
                                    "Primary": "true",
                                    "PrivateIpAddress": "xxxxx"
                                }
                            ],
                            "PrivateDnsName": "ip-xxxx-xx.ec2.internal",
                            "Attachment": {
                                "Status": "attached",
                                "DeviceIndex": 0,
                                "DeleteOnTermination": "true",
                                "AttachmentId": "eni-attach-xxxxx",
                                "AttachTime": "2017-0xxxxx"
                            },
                            "Groups": [
                                {
                                    "GroupName": "xx",
                                    "GroupId": "sg-xxxx"
                                },
                                {
                                    "GroupName": "xxxx",
                                    "GroupId": "sg-xxx"
                                },
                                {
                                    "GroupName": "xxxx",
                                    "GroupId": "sg-xxx"
                                },
                                {
                                    "GroupName": "xxxx",
                                    "GroupId": "sg-xxxx"
                                }
                            ],
                            "Ipv6Addresses": [],
                            "OwnerId": "xxx",
                            "SubnetId": "subnet-xxxx",
                            "PrivateIpAddress": "1xxxx"
                        }
                    ],
                    "SourceDestCheck": "true",
                    "Placement": {
                        "Tenancy": "default",
                        "GroupName": "",
                        "AvailabilityZone": "us-xxxxxxx"
                    },
                    "Hypervisor": "xen",
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/xxxxxx",
                            "Ebs": {
                                "Status": "attached",
                                "DeleteOnTermination": "true",
                                "VolumeId": "vol-xxxxxx",
                                "AttachTime": "2017-xxxxxxx"
                            }
                        }
                    ],
                    "Architecture": "x86_64",
                    "RootDeviceType": "ebs",
                    "IamInstanceProfile": {
                        "Id": "xxxxxxxx",
                        "Arn": "arn:aws:iam::xxxxxxx"
                    },
                    "RootDeviceName": "/dev/xxxxx",
                    "VirtualizationType": "hvm",
                    "Tags": [
                        {
                            "Value": "xxxxxx",
                            "Key": "aws:cloudformation:stack-name"
                        },
                        {
                            "Value": "xxxxxxx",
                            "Key": "aws:cloudformation:logical-id"
                        },
                        {
                            "Value": "arn:aws:cloudformation:xxxxxx",
                            "Key": "aws:cloudformation:stack-id"
                        }
                    ],
                    "AmiLaunchIndex": 0
                }
            ],
            "ReservationId": "r-xxxxx",
            "RequesterId": "xxxxx",
            "Groups": [],
            "OwnerId": "xxxxxx"
        }
    ] 
}

我需要以一种查询IP /主机名/ InstanceID的方式来存储它,以获取JSON中存在的所有元素。

我需要上述指导。


问题答案:

您无法直接做到这一点,但是幸运的是,有一个名为ReJSON的新Redis模块可以完全满足您的需求,并且它还具有不错的Python绑定。您需要使用redis
4.0,然后编译并安装ReJSON并配置redis来加载它,并且它添加了用于JSON操作的本机命令。

它使您可以将JSON文档存储在redis中,然后获取或修改文档树中的特定元素,而无需检索(或在内部甚至解析)该文档。它的Python客户端甚至允许您存储python字典并将其自动转换为JSON。

ReJSON模块:http://rejson.io

Python客户端:https://pypi.python.org/pypi/rejson

例:

from rejson import Client, Path

rj = Client(host='localhost', port=6379)

# Set the key `obj` to some object
obj = {
    'answer': 42,
    'arr': [None, True, 3.14],
    'truth': {
        'coord': 'out there'
    }
}
rj.jsonset('obj', Path.rootPath(), obj)

# Get something
print 'Is there anybody... {}?'.format(
    rj.jsonget('obj', Path('.truth.coord'))
)


 类似资料:
  • 问题内容: hmset函数可以设置每个字段的值,但是我发现,如果值本身是一个复杂的结构化对象,则从hget返回的值是一个序列化的字符串,而不是原始对象 例如 i的类型是字符串,而不是python对象,除了手动解析每个字段外,还有什么方法可以解决此问题? 问题答案: 您无法在Redis中创建嵌套结构,这意味着您无法(例如)在本地Redis哈希图中存储本地Redis列表。 如果确实需要嵌套结构,则可能

  • 问题内容: 我最近在nodejs中从memcached切换到Redis。我在node- memcached中喜欢的事情是我可以将整个javascript对象保存在内存中。可悲的是,我无法在Redis中做到这一点。例如,我得到以下对象: 使用3rd-Eden / node-memcached我可以做到: 然后 然后,我将按原样获得保存的对象。 Redis的问题在于,如果我像这样保存对象: 当我获得价

  • 我正在尝试使用Cassandra中的复合表和nodejs绑定来存储嵌套的JSON对象。 假设我的数据看起来像这样(朋友和敌人实际上拥有比简单地图更复杂的数据结构): 根据我对复合键的理解(这里:https://pkghosh.wordpress.com/2013/07/14/storing-nested-objects-in-cassandra-composite_columns/),我希望像这样

  • 我试图根据第二个嵌套数组中的值的数量将嵌套数组转换为对象。我似乎无法获取值字段的数量并将其用作规范中的键。现在这是我的输入JSON文件: 这是我想要的JSON输出: 这是我目前的规格 有人有类似的情况吗?

  • 问题内容: 我对Redis中的HSET有疑问。据我所知,redis是一个键值数据库。这意味着所有事物都存储为键值,例如,我们没有表。我想在redis中保存一些内容,所以我决定使用Hashmap。由于HMSET已过时,我们应该改用HSET,我应该如何在hset中存储许多属性作为值和id作为键?你知道我想保存这样的东西: 但是,如果我要保存很多字段,我应该为每个字段写这一行?例如 : 如在HSET中,

  • 我正在尝试构建复杂的JSON对象嵌套数组。我正在努力使用JOLT获得我期望的结构。任何帮助都将不胜感激。 我正试图从appspot上理解JOLT,但对于我来说,很难理解对数据集进行递归迭代。 即使数组中有 1000 个对象,“JobId”也应该与毫秒相同,这就是为什么我一次生成“JobId”而不是在每个对象中并尝试在下一次迭代中移动到正确的位置失败的原因。 输入的 JSON 为: 到目前为止,我想