Я предпочитаю следующее хранить любое количество переменных без создания отдельного класса.
final public static Map<String, Map<String, Float>> myMap = new HashMap<String, Map<String, Float>>();
Чтобы загрузить файл в словарь с помощью модуля json
, json.load
возьмет дескриптор файла:
import json
with open('yourfile.json') as fh:
val = json.load(fh)
type(val)
dict
# to get the structure you're looking for
val1 = val.get('a')
type(val1)
list
# Now you can iterate over it, or throw it into pandas if you want a
# table-like data structure
val1[0].keys()
dict_keys(['Name', 'number', 'defaultPrice', 'prices'])
Вы можете сделать это с использованием строкового подхода, который есть у вас в исходном сообщении:
import json
with open('yourfile.json') as fh:
mystr = fh.read()
# Note, this is json.loads, which takes a string arg not a file handle
val = json.loads(mystr)
val
{'a': [{'Name': 'name1', 'number': 'number1', 'defaultPrice': {'p': '232', 'currency': 'CAD'}, 'prices': {'DZ': {'p': '62', 'currency': 'RMB'}, 'AU': {'p': '73', 'currency': 'AUD'}, 'lg': 'en'}}, {'Name': 'name2', 'number': 'number2', 'defaultPrice': {'p': '233', 'currency': 'CAD'}, 'prices': {'DZ': {'p': '63', 'currency': 'RMB'}, 'US': {'p': '72', 'currency': 'USD'}, 'Lg': 'en'}}]}
type(val)
dict
# To put this into pandas
import pandas as pd
val1 = val.get('a')
df = pd.DataFrame(val1)
Где df
выглядит так:
Name ... prices
0 name1 ... {'DZ': {'p': '62', 'currency': 'RMB'}, 'AU': {...
1 name2 ... {'DZ': {'p': '63', 'currency': 'RMB'}, 'US': {...
[2 rows x 4 columns]
Панды будут вменять имена столбцов в качестве ключей в списке словарей