簡體   English   中英

如何從 json 文件中提取一些數據

[英]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,它有兩個語句:

  1. 映射到新的 object
  2. 輸出到控制台。

這是一個完整的工作示例:

 // 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM