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

由于我是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'))

)

以上是 如何使用Python在Redis中存储复杂的嵌套JSON 的全部内容, 来源链接: utcz.com/qa/429400.html

回到顶部