[英]How to extract some data from a json file
我想從 json 文件中提取一些數據並將其插入到另一個 json 文件中,如下所示:
{
"name": "File",
"artist": "Andrew",
"attributes":
[
{
"trait_type": "Background",
"value": "Black"
},
{
"trait_type": "Base",
"value": "White"
},
{
"trait_type": "Eye Type",
"value": "Eye"
},
{
"trait_type": "Ear Type",
"value": "Ear"
},
{
"trait_type": "Tail Type",
"value": "Tail"
},
{
"trait_type": "Headwear",
"value": "Hat"
},
{
"trait_type": "Mouth Accessories",
"value": "Cigarette"
},
{
"trait_type": "Eye Accessories",
"value": "Mask"
},
{
"trait_type": "Ear Accessories",
"value": "Headphones"
},
{
"trait_type": "Details",
"value": "Headband"
}
],
},
{
"name": "File2",
"artist": "Andrew",
"attributes":
[
{
"trait_type": "Background",
"value": "White"
},
{
"trait_type": "Base",
"value": "Black"
},
{
"trait_type": "Eye Type",
"value": "Eye"
},
{
"trait_type": "Ear Type",
"value": "Ear"
},
{
"trait_type": "Tail Type",
"value": "Tail"
},
{
"trait_type": "Headwear",
"value": "Hat"
},
{
"trait_type": "Mouth Accessories",
"value": "Cigarette"
},
{
"trait_type": "Eye Accessories",
"value": "Mask"
},
{
"trait_type": "Ear Accessories",
"value": "Headphones"
},
{
"trait_type": "Details",
"value": "Headband"
}
],
},
至
[
{
"Background": "Black",
"Base": "White",
"Eye Type": "Eye",
"Ear Type": "Ear",
"Tail Type": "Tail",
"Headwear": "Hat",
"Mouth Accessories": "Cigarette",
"Eye Accessories": "Mask",
"Ear Accessories": "Headphones",
"Details": "Headband",
"tokenId": 0
},
{
"Background": "White",
"Base": "Black",
"Eye Type": "Eye",
"Ear Type": "Ear",
"Tail Type": "Tail",
"Headwear": "Hat",
"Mouth Accessories": "Cigarette",
"Eye Accessories": "Mask",
"Ear Accessories": "Headphones",
"Details": "Headband",
"tokenId": 1
},
]
第一個json文件數據很多,為了不寫太長的代碼,我只放了兩個例子。 在新文件中,常量是“Background”、“Base”……最后一個值是“tokenId”,它會逐漸增加。
非常感謝。
使用本主題編寫腳本是否可以僅使用 JavaScript 將數據寫入文件? 這是一個簡單的數組/對象迭代......
const json = '[{"name":"File","artist":"Andrew","attributes":[{"trait_type":"Background","value":"Black"},{"trait_type":"Base","value":"White"},{"trait_type":"Eye Type","value":"Eye"},{"trait_type":"Ear Type","value":"Ear"},{"trait_type":"Tail Type","value":"Tail"},{"trait_type":"Headwear","value":"Hat"},{"trait_type":"Mouth Accessories","value":"Cigarette"},{"trait_type":"Eye Accessories","value":"Mask"},{"trait_type":"Ear Accessories","value":"Headphones"},{"trait_type":"Details","value":"Headband"}]},{"name":"File2","artist":"Andrew","attributes":[{"trait_type":"Background","value":"White"},{"trait_type":"Base","value":"Black"},{"trait_type":"Eye Type","value":"Eye"},{"trait_type":"Ear Type","value":"Ear"},{"trait_type":"Tail Type","value":"Tail"},{"trait_type":"Headwear","value":"Hat"},{"trait_type":"Mouth Accessories","value":"Cigarette"},{"trait_type":"Eye Accessories","value":"Mask"},{"trait_type":"Ear Accessories","value":"Headphones"},{"trait_type":"Details","value":"Headband"}]}]'; const result = JSON.parse(json).map((parent, i) => { const val = parent.attributes.reduce((prev, curr) => ({...prev, [curr.trait_type]: curr.value}), {}); val.tokenId = i; return val; }) console.log(JSON.stringify(result))
const dat = [ {"name": "File", "artist": "Andrew", "attributes": [{"trait_type": "Background", "value": "Black"}, {"trait_type": "Base", "value": "White"}, {"trait_type": "Eye Type", "value": "Eye"}, {"trait_type": "Ear Type", "value": "Ear"}, {"trait_type": "Tail Type", "value": "Tail"}, {"trait_type": "Headwear", "value": "Hat"}, {"trait_type": "Mouth Accessories", "value": "Cigarette"}, {"trait_type": "Eye Accessories", "value": "Mask"}, {"trait_type": "Ear Accessories", "value": "Headphones"}, {"trait_type": "Details", "value": "Headband"}], }, {"name": "File2", "artist": "Andrew", "attributes": [{"trait_type": "Background", "value": "White"}, {"trait_type": "Base", "value": "Black"}, {"trait_type": "Eye Type", "value": "Eye"}, {"trait_type": "Ear Type", "value": "Ear"}, {"trait_type": "Tail Type", "value": "Tail"}, {"trait_type": "Headwear", "value": "Hat"}, {"trait_type": "Mouth Accessories", "value": "Cigarette"}, {"trait_type": "Eye Accessories", "value": "Mask"}, {"trait_type": "Ear Accessories", "value": "Headphones"}, {"trait_type": "Details", "value": "Headband"}] } ] const res = [] dat.forEach(d => { let obj = {} d.attributes.forEach(m => { obj[m['trait_type']] = m['value'] }) res.push(obj) }) console.log(res)
請記住,JSON 代表 JavaScript Object 表示法。 這意味着任何有效的 JSON 都是 JavaScript object 的字符串化(或序列化)版本。 這意味着我們可以直接從 JSON 字符串中簡單地創建一個 in memory object ,如下所示:(限制示例以使其保持較小)
let origJson = {
"name": "File",
"artist": "Andrew",
"attributes":
[
{
"trait_type": "Background",
"value": "Black"
}
]
}
請注意,您需要將第一個作為這些數組的數組,因此您確實需要將第一個 JSON 包裝在 [ ] 的外部集合中,這樣您就有一個可以迭代的數組。
像這樣...
let origJson = [{
"name": "File",
"artist": "Andrew",
"attributes":
[
{
"trait_type": "Background",
"value": "Black"
}
]
},
{
//second object here...
},
{
// ... more objects
},
]
完成后,您需要一個代表您的第二個 object 的 class - 您要映射到的那個。 您需要完成 object 以確保可以初始化每個屬性——這對我來說輸入太多了。 另請注意,您有一些帶有空格的屬性名稱,並且我已刪除了這些空格。 空格不適用於屬性名稱。 這個 NewObject class 只是您的第二個 JSON 示例的表示。
class NewObject
{
constructor(Background, Base, EyeType, EarType, TailType,
Headwear, MouthAccessories, EyeAccessories, EarAccessories,
Details, tokenId)
{
this.Background =Background;
this.Base = Base;
this.EyeType = ...
}
}
一旦你有了它,你現在可以遍歷第一個 object 創建 NewObject 的新實例。 類似於以下內容。
// set up a new array of NewObjects
let allNewObjects = [];
origJson.forEach((item) => {
allNewObjects.push (new NewObject(item.attributes[0].value, item.attributes[1].value, ...));
console.log(item.attributes[0].value, item.attributes[1].value);
});
因為我建議將origJson
包裝在外部 [ ] 中,這意味着加載的變量origJson
成為原始對象的數組。
JavaScript arrays 有一個 .forEach() 方法,它將為數組中的每個項目調用 function ——將數組中的每個項目作為參數傳遞。
在我的示例中,我實現了一個箭頭 function,它有兩個語句:
這是一個完整的工作示例:
// define (minimal) target class class NewObject { constructor(Background, Base) { this.Background =Background; this.Base = Base; } } // load up your JSON into an array of objects let origJson = [{ "name": "File", "artist": "Andrew", "attributes": [ { "trait_type": "Background", "value": "Black" },{ "trait_type": "Base", "value": "White" }, ] }] // init array to hold all new objects let allNewObjects = []; // iterate over each original object and map to new origJson.forEach((item) => { allNewObjects.push (new NewObject(item.attributes[0].value, item.attributes[1].value)); console.log("attr 0: " + item.attributes[0].value, "attr 1: " + item.attributes[1].value); });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.