python - 使用Python从json数据中删除 'u'

标签 python json elasticsearch amazon-sqs

我有一个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_listdict,因此您应该可以使用简单的方法将其提取出来

instanceid = new_list['facter']['instanceid']

您在字符串前面看到的u只是告诉您这些字符串是unicode字符串,而不是“C字符串”。
对于您而言,这无关紧要,因为任何词典键中都没有Unicode字符。

关于python - 使用Python从json数据中删除 'u',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498675/

相关文章:

Python,一个线程生成另一个线程是否正确

javascript - 向 AWS API Gateway 发出的 Ajax 请求无法解析 json 响应

python - 如何优雅地解决Python KeyError(Python csv库)

javascript - Highchart 和 json 数据

mongodb - 如何使用 Elasticsearch 或其他搜索引擎?

elasticsearch - 术语聚合上 doc_count 的范围过滤器

python - 如何在matplotlib中设置多边形面片的边缘颜色

python - 有没有内置MSMOTE

elasticsearch - Elasticsearch Couchbase Transport插件

python - 对我的数组中的随机数进行排序