所以我嘗試在網上搜索以找到一種可以轉換以下json的方法。
{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Forecast%": "67",
"Sponsor": "Jon R",
"IsActive": "1",
"InternalOrder": "null",
"Forecast": "null",
"BidStatus": "null",
"ProjectNotes": "null",
"EstimateTypeCode": "null",
"Start": "null",
"SponsoringDistrict": "null",
"LocationState": "null",
"Finish": "null",
"AreaManager": "null",
"CTG Vendor": "null"
}
到下面的那個。
{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Attribute":"Forecast%",
"AttrValue":"67",
},
{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Attribute":"Sponsor",
"AttrValue":"Jon R",
},
{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Attribute":"IsActive",
"AttrValue":"1",
},
...
現在在這里,如果您看到除前四個屬性之外的所有屬性都被轉換為 Attribute 和 AttributeValue 并獲得它們自己的記錄。
我曾嘗試在網路上搜索解決方案,但我仍在努力尋找解決方案。
如果有人可以,請幫助。
先感謝您。
uj5u.com熱心網友回復:
使用pd.melt:
import json
with open('data.json') as json_data:
data = json.load(json_data)
out = pd.DataFrame.from_dict(data, orient='index').T \
.melt(['eTask_ID', 'Organization', 'BidID', 'Project'],
var_name='Attribute', value_name='AttrValue') \
.to_json(orient='records', indent=4)
輸出:
>>> print(out)
[
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"Forecast%",
"AttrValue":67
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"Sponsor",
"AttrValue":"Jon R"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"IsActive",
"AttrValue":1
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"InternalOrder",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"Forecast",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"BidStatus",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"ProjectNotes",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"EstimateTypeCode",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"Start",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"SponsoringDistrict",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"LocationState",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"Finish",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"AreaManager",
"AttrValue":"null"
},
{
"eTask_ID":100,
"Organization":"Power",
"BidID":2,
"Project":"IPP - C",
"Attribute":"CTG Vendor",
"AttrValue":"null"
}
]
uj5u.com熱心網友回復:
只有標準庫:
import json
from typing import Dict
json_data = """
{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Forecast%": "67",
"Sponsor": "Jon R",
"IsActive": "1",
"InternalOrder": "null",
"Forecast": "null",
"BidStatus": "null",
"ProjectNotes": "null",
"EstimateTypeCode": "null",
"Start": "null",
"SponsoringDistrict": "null",
"LocationState": "null",
"Finish": "null",
"AreaManager": "null",
"CTG Vendor": "null"
}
"""
parsed_json: Dict[str, str] = json.loads(json_data)
repeat_keys = ["eTask_ID", "Organization", "BidID", "Project"]
result = []
for key, value in parsed_json.items():
if key in repeat_keys:
continue
attr_dict = {rep_key: parsed_json[rep_key] for rep_key in repeat_keys}
attr_dict.update({"Attribute": key})
attr_dict.update({"AttrValue": value})
result.append(attr_dict)
result_json = json.dumps(result)
print(result_json)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317963.html
