8

此 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 种不同的技术来从中获得我需要的东西,但是我在使用jsonandsimplejson模块时遇到了问题。

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

142250.0, BC
210.88999999999996, USD
1065600.0, TK
4

5 回答 5

11

注意:您来自 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'])
于 2013-11-01T15:33:41.687 回答
1

您从 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'])
于 2018-09-27T05:30:39.053 回答
-1
import json

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

这应该工作

于 2013-11-01T15:31:45.993 回答
-1

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

import ast

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

输出

142250.0, BC
210.89, USD
1065600.0, TK

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

于 2013-11-01T16:04:16.080 回答
-2

这应该做。

import json

def parse_json(your_json):
    to_dict = json.loads(your_json)
    for item in to_dict['results']:
        print item['total']
于 2013-11-01T15:31:51.043 回答