簡體   English   中英

使用Python從json數據中刪除'u'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM