From API I got json response like:
从API我得到了json响应,如:
[{'wartosc': '3.59', 'aktualizacja': '1519933403', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'bat', 'jednostka': 'V', 'minimum': 0.0, 'maksimum': 5.0}, {'wartosc': '1020', 'aktualizacja': '1519584193', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'press', 'jednostka': 'hPa', 'minimum': 0.0, 'maksimum': 1600.0}, {'wartosc': '21.2', 'aktualizacja': '1519576134', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'temp', 'jednostka': '*C', 'minimum': -50.0, 'maksimum': 100.0}, {'wartosc': '23.8', 'aktualizacja': '1520020905', 'nazwa': 'testnode', 'nazwa_ui': 'Testowy', 'id_punktu': 15, 'jakosc_sygnalu': -75, 'czujnik': 'temp', 'jednostka': '*C', 'minimum': -50.0, 'maksimum': 100.0}, {'wartosc': '3.10', 'aktualizacja': '1520011249', 'nazwa': 'testnode', 'nazwa_ui': 'Testowy', 'id_punktu': 15, 'jakosc_sygnalu': -75, 'czujnik': 'bat', 'jednostka': 'V', 'minimum': 0.0, 'maksimum': 5.0}]
I would like to group several json objects based on the 'nazwa' key.
我想根据'nazwa'键对几个json对象进行分组。
For example:
{
"artekroom": {
"id_punktu": 1,
"nazwa_ui": "Pokój Artura",
"readings": [{
"czujnik": "temp",
"wartosc": "21.2",
"maksimum": 100,
"minimum": -50,
"aktualizacja": "1519576134",
"jednostka": "C"
},
{
"czujnik": "humi",
"wartosc": "21.2",
"maksimum": 100,
"minimum": -50,
"aktualizacja": "1520011249",
"jednostka": "hPa"
}
]
}
}
Any hints how to do that ?
任何提示如何做到这一点?
1 个解决方案
#1
0
text = "[{'wartosc': '3.59', 'aktualizacja': '1519933403', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'bat', 'jednostka': 'V', 'minimum': 0.0, 'maksimum': 5.0}, {'wartosc': '1020', 'aktualizacja': '1519584193', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'press', 'jednostka': 'hPa', 'minimum': 0.0, 'maksimum': 1600.0}, {'wartosc': '21.2', 'aktualizacja': '1519576134', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'temp', 'jednostka': '*C', 'minimum': -50.0, 'maksimum': 100.0}, {'wartosc': '23.8', 'aktualizacja': '1520020905', 'nazwa': 'testnode', 'nazwa_ui': 'Testowy', 'id_punktu': 15, 'jakosc_sygnalu': -75, 'czujnik': 'temp', 'jednostka': '*C', 'minimum': -50.0, 'maksimum': 100.0}, {'wartosc': '3.10', 'aktualizacja': '1520011249', 'nazwa': 'testnode', 'nazwa_ui': 'Testowy', 'id_punktu': 15, 'jakosc_sygnalu': -75, 'czujnik': 'bat', 'jednostka': 'V', 'minimum': 0.0, 'maksimum': 5.0}]"
# import json
# data = json.loads( text )
data = eval(text)
final_data = {}
for item in data:
d = {"czujnik": item["czujnik"],
"wartosc": item["wartosc"],
"maksimum": item["maksimum"],
"minimum": item["minimum"],
"aktualizacja": item["aktualizacja"],
"jednostka": item["jednostka"]}
if item['nazwa'] in final_data:
final_data[item['nazwa']]['readings'].append(d)
else:
final_data[item['nazwa']] = {
"id_punktu": item["id_punktu"],
"nazwa_ui": item["nazwa_ui"],
"readings": [d]
}
print(final_data)
You need to iterate on the parsed JSON data. Here I've used eval based on your input. You can use json
module as well. It creates another dictionary based on the parsed data.
您需要迭代解析的JSON数据。在这里,我根据您的输入使用了eval。您也可以使用json模块。它根据解析的数据创建另一个字典。
#1
0
text = "[{'wartosc': '3.59', 'aktualizacja': '1519933403', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'bat', 'jednostka': 'V', 'minimum': 0.0, 'maksimum': 5.0}, {'wartosc': '1020', 'aktualizacja': '1519584193', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'press', 'jednostka': 'hPa', 'minimum': 0.0, 'maksimum': 1600.0}, {'wartosc': '21.2', 'aktualizacja': '1519576134', 'nazwa': 'artekroom', 'nazwa_ui': 'Pokój Artura', 'id_punktu': 1, 'jakosc_sygnalu': None, 'czujnik': 'temp', 'jednostka': '*C', 'minimum': -50.0, 'maksimum': 100.0}, {'wartosc': '23.8', 'aktualizacja': '1520020905', 'nazwa': 'testnode', 'nazwa_ui': 'Testowy', 'id_punktu': 15, 'jakosc_sygnalu': -75, 'czujnik': 'temp', 'jednostka': '*C', 'minimum': -50.0, 'maksimum': 100.0}, {'wartosc': '3.10', 'aktualizacja': '1520011249', 'nazwa': 'testnode', 'nazwa_ui': 'Testowy', 'id_punktu': 15, 'jakosc_sygnalu': -75, 'czujnik': 'bat', 'jednostka': 'V', 'minimum': 0.0, 'maksimum': 5.0}]"
# import json
# data = json.loads( text )
data = eval(text)
final_data = {}
for item in data:
d = {"czujnik": item["czujnik"],
"wartosc": item["wartosc"],
"maksimum": item["maksimum"],
"minimum": item["minimum"],
"aktualizacja": item["aktualizacja"],
"jednostka": item["jednostka"]}
if item['nazwa'] in final_data:
final_data[item['nazwa']]['readings'].append(d)
else:
final_data[item['nazwa']] = {
"id_punktu": item["id_punktu"],
"nazwa_ui": item["nazwa_ui"],
"readings": [d]
}
print(final_data)
You need to iterate on the parsed JSON data. Here I've used eval based on your input. You can use json
module as well. It creates another dictionary based on the parsed data.
您需要迭代解析的JSON数据。在这里,我根据您的输入使用了eval。您也可以使用json模块。它根据解析的数据创建另一个字典。