此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种不同的技术来获取我需要的技术,但是我使用json
和simplejson
模块遇到了问题。
理想情况下,输出将是这样的:
142250.0, BC
210.88999999999996, USD
1065600.0, TK
答案 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))
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']