簡體   English   中英

解析嵌套的JSON數據

[英]Parsing nested JSON data

此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

注意:來自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文本 JSON字符串必須以啟動"引號 ,不是' ,但它似乎是一個有效的Python文字,您可以用解析ast.literal_eval()函數

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模塊對其進行解析。

您從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'])
import json

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

這應該工作

這應該做。

import json

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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