[英]Remove 'u' from json data using Python
我有一個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字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.