我有一个Python代码,该代码基本上从Amazon SQS提取数据,我需要将此JSON数据索引到Elasticsearch。目前,我的代码如下:
import os
import json
import uuid
import time
import boto.sqs
import boto
from boto.sqs.connection import SQSConnection
from boto.sqs.message import Message
from boto.sqs.message import RawMessage
from ConfigParser import SafeConfigParser
import ast
parser = SafeConfigParser()
parser.read('/home/ubuntu/config.ini')
#get details via config file
region = parser.get('default', 'aws_region')
access_key = parser.get('default', 'aws_access_key')
secret_key = parser.get('default', 'aws_secret_key')
queue_name = parser.get('default', 'sqs_queue_name')
sqs = boto.sqs.connect_to_region(region,aws_access_key_id=access_key,aws_secret_access_key=secret_key)
q = sqs.get_queue(queue_name) #SQS queue name
m = q.read(visibility_timeout=15)
if m == None:
print "No message!"
else:
a = m.get_body()
print a
print type(a)
new_list = json.loads(a)
print new_list
print type(new_list)
结果如下:
{
"facter": {
"blockdevice_xvda_size": 8589934592,
"blockdevices": "xvda,xvdb",
"fqdn": "ip-1-12-5-9.us-west-2.compute.internal",
"hardwaremodel": "x86_64",
"hostname": "ip-1-12-5-9",
"instanceid": "i-a54d7c",
"ipaddress": "1.12.5.9",
"is_virtual": "true",
"kernelrelease": "3.13.0-48-generic",
"lsbdistcodename": "trusty",
"lsbdistdescription": "Ubuntu 14.04.2 LTS",
"macaddress": "2:00:a:66:61:4f",
"memoryfree": "3.56 GB",
"memorytotal": "3.68 GB",
"netmask": "255.255.255.12",
"operatingsystem": "Ubuntu",
"operatingsystemrelease": "14.04",
"processor0": "Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz",
"processorcount": "1",
"timezone": "UTC",
"uniqueid": "660a4f41",
"uptime": "23:36 hours"
}
}
<type 'unicode'>
{u'facter': {u'kernelrelease': u'3.13.0-48-generic', u'memoryfree': u'3.56 GB', u'memorytotal': u'3.68 GB', u'processorcount': u'1', u'timezone': u'UTC', u'operatingsystem': u'Ubuntu', u'uptime': u'23:36 hours', u'hostname': u'ip-1-12-5-9', u'is_virtual': u'true', u'blockdevices': u'xvda,xvdb', u'hardwaremodel': u'x86_64', u'netmask': u'255.255.255.192', u'blockdevice_xvda_size': 8589934592, u'uniqueid': u'660a4f41', u'ipaddress': u'10.102.65.79', u'lsbdistdescription': u'Ubuntu 14.04.2 LTS', u'macaddress': u'2:00:a:66:41:4f', u'operatingsystemrelease': u'14.04', u'processor0': u'Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz', u'instanceid': u'i-a54d7c', u'fqdn': u'ip-1-12-5-9.us-west-2.compute.internal', u'lsbdistcodename': u'trusty'}}
<type 'dict'>
如您所见,它是具有unicode的字典。我需要从此字典中提取“instanceid”,并在ES中使用它对它进行索引。我被困在如何提取索引ID上。我试过了:
ast.literal_eval(json.dumps())
我到底在做什么错?
最佳答案
由于new_list
是dict
,因此您应该可以使用简单的方法将其提取出来
instanceid = new_list['facter']['instanceid']
您在字符串前面看到的
u
只是告诉您这些字符串是unicode字符串,而不是“C字符串”。对于您而言,这无关紧要,因为任何词典键中都没有Unicode字符。
关于python - 使用Python从json数据中删除 'u',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498675/