解析嵌套JSON d

2024-05-14 20:57:17 发布

您现在位置:Python中文网/ 问答频道 /正文

此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

Tags: 模块数据信息idjsonmongodbokresult
3条回答

您从mongodb获得的响应似乎与为dictionary类型对象放置的响应兼容。作为

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

我们不能直接将它赋给dict type对象,而不是将它放入多行字符串并用双引号替换单引号。并对其进行进一步的操作,如:

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'])

注意: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'])

示例文本无效JSON text。JSON字符串必须以^{} quotation mark开头,而不是';但它似乎是一个可以用^{} function解析的有效Python文本:

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模块来解析它。

相关问题 更多 >

    热门问题