解析嵌套的JSON数据

时间:2013-11-01 15:20:36

标签: python json

此JSON输出来自MongoDB聚合查询。我基本上需要将嵌套数据JSON向下解析为“total''_id'值。

{
'ok': 1.0, 
'result': [
            {
                'total': 142250.0, 
                '_id': 'BC'
            }, 
            {
                'total': 210.88999999999996,
                 '_id': 'USD'
            }, 

            {
                'total': 1065600.0, 
                '_id': 'TK'
            }
            ]
}

我尝试了5种不同的技术来获取我需要的技术,但是我使用jsonsimplejson模块遇到了问题。

理想情况下,输出将是这样的:

142250.0, BC
210.88999999999996, USD
1065600.0, TK

5 个答案:

答案 0 :(得分:8)

注意:来自MongoDB的JSON响应实际上并不有效。 JSON需要双引号("),而不是单引号(')。

我不确定为什么你的回复有单引号而不是双引号,但从它的外观来看你可以替换它们然后只使用内置的json模块:

from __future__ import print_function
import json

response = """{
    'ok': 1.0, 
    'result': [
        {
            'total': 142250.0, 
            '_id': 'BC'
        }, 
        {
            'total': 210.88999999999996,
             '_id': 'USD'
        }, 

        {
            'total': 1065600.0, 
            '_id': 'TK'
        }
        ]
}"""

# JSON requires double-quotes, not single-quotes.
response = response.replace("'", '"')
response = json.loads(response)
for doc in response['result']:
    print(doc['_id'], doc['total'])

答案 1 :(得分:0)

您的示例文字无效JSON text。 JSON字符串必须以" quotation mark开头,而不是';但它似乎是一个有效的Python文字,您可以使用ast.literal_eval() function解析:

import ast

data = ast.literal_eval(input_string)
for item in data["result"]:
    print("{total}, {_id}".format(**item))

Output

142250.0, BC
210.89, USD
1065600.0, TK

更好的方法可能是修复查询过程以获取有效的JSON并使用json模块来解析它。

答案 2 :(得分:0)

您从mongodb获得的响应似乎与字典类型对象兼容。

{
    'ok': 1.0,  'result': [
        {
            'total': 142250.0, 
            '_id': 'BC'
        }, 
        {
            'total': 210.88999999999996,
             '_id': 'USD'
        }, 
        {
            'total': 1065600.0, 
            '_id': 'TK'
        }
    ]
}

我们不能将其放入多行字符串并用双引号替换单引号,所以不能直接将其分配给dict类型对象。并对它执行进一步的操作,如:

json_data = {
    'ok': 1.0,
    'result':
        [
            {
                'total': 142250.0,
                '_id': 'BC'
            },
            {
                'total': 210.88999999999996,
                '_id': 'USD'
            },
            {
                'total': 1065600.0,
                '_id': 'TK'
            }
    ]
}

并且:

for data in json_data['result']:
    print(data['total'], data['_id'])

答案 3 :(得分:-2)

import json

data = json.loads(mongo_db_json)
result = data['result']
for value_dict in result:
    print '{0}, {1}'.format(value['total'], value['_id'])

这应该有效

答案 4 :(得分:-3)

这应该做。

import json

def parse_json(your_json):
    to_dict = json.loads(your_json)
    for item in to_dict['results']:
        print item['total']