我有兩個 JSON 檔案,都有相同數量的物件,每個物件都有一個 ID 鍵"DOCN",問題是有些物件有不同的鍵,例如在 file1 中,物件"DOCN": "000093019"有 4 個鍵,而在 file2 中,同一個物件有 5 ..
我正在嘗試創建一個包含兩個檔案中相同物件的新檔案(在 file1 和 file2 中找到丟失的物件并將它們添加到物件中)
例子:
檔案 1:
[
{
"DOCN": "000093019",
"A": "blabla",
"B": "blabla",
"C": "blabla"
},
{
"DOCN": "000093085",
"B": "blabla",
"C": "blabla",
"D": "blabla"
}
]
檔案2:
[
{
"DOCN": "000093019",
"A": "blabla",
"C": "blabla",
"D": "blabla",
"E": "blabla"
},
{
"DOCN": "000093085",
"A": "blabla",
"B": "blabla",
"C": "blabla"
}
]
我想實作的目標:file3:
[
{
"DOCN": "000093019",
"A": "blabla",
"B": "blabla",
"C": "blabla",
"D": "blabla",
"E": "blabla"
},
{
"DOCN": "000093085",
"A": "blabla",
"B": "blabla",
"C": "blabla",
"D": "blabla"
}
]
uj5u.com熱心網友回復:
我會在兩個不同的陣列中讀取它們并將其映射以創建新的陣列。
// read file1 instead using `fs`
const arr1 = [
{
"DOCN": "000093019",
"A": "blabla",
"B": "blabla",
"C": "blabla"
},
{
"DOCN": "000093085",
"B": "blabla",
"C": "blabla",
"D": "blabla"
}
]
// read file2 instead
const arr2 = [
{
"DOCN": "000093019",
"A": "blabla",
"C": "blabla",
"D": "blabla",
"E": "blabla"
},
{
"DOCN": "000093085",
"A": "blabla",
"B": "blabla",
"C": "blabla"
}
]
const arr3 = arr1.map(
x => {
const val = arr2.find(y => y.DOCN === x.DOCN)
x= {
...x,
...val
}
return x
})
//write arr3 to new file
```
uj5u.com熱心網友回復:
我會按照以下方式進行 - 使用 Pandas、concat 資料幀、group by 加載 2 個檔案DOCN并獲取第一條記錄(這將獲取 none None 值),然后將其轉換為串列并洗掉 None 條目 -
df1 = pd.read_json("my_file1.json")
df2 = pd.read_json("my_file2.json")
df = pd.concat([df1, df2])
grp = df.groupby("DOCN").first().reset_index()
[{k: v for k, v in record if v} for record in grp.to_dict(orient='records')]
uj5u.com熱心網友回復:
嗯,這是對字典的簡單操作。我不能說這對于大型資料集的表現最好。但是您可以根據鍵“DOCN”合并字典。(可能有更好的方法!;-))
f1 = [
{
"DOCN": "000093019",
"A": "blabla",
"B": "blabla",
"C": "blabla"
},
{
"DOCN": "000093085",
"B": "blabla",
"C": "blabla",
"D": "blabla"
}
]
f2 = [
{
"DOCN": "000093019",
"A": "blabla",
"C": "blabla",
"D": "blabla",
"E": "blabla"
},
{
"DOCN": "000093085",
"A": "blabla",
"B": "blabla",
"C": "blabla"
}
]
f1 = {item.get("DOCN"): item for item in f1}
f2 = {item.get("DOCN"): item for item in f2}
keys = set(list(f1.keys()) list(f2.keys()))
output = []
for key in keys:
output.append({**f1.get(key), **f2.get(key)})
print(output)
輸出是:
[
{
"DOCN": "000093019",
"A": "blabla",
"B": "blabla",
"C": "blabla",
"D": "blabla",
"E": "blabla"
},
{
"DOCN": "000093085",
"B": "blabla",
"C": "blabla",
"D": "blabla",
"A": "blabla"
}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324340.html
上一篇:從陣列創建新的JSON字串
