如何从 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”,它逐渐增加。
非常感谢。
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 Notation。
这意味着任何有效的 JSON 都是 JavaScript 对象的字符串化(或序列化)版本。
这意味着我们可以直接从 JSON 字符串中简单地创建一个内存对象,如下所示:(有限的例子以保持它的小)
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
},
]
完成后,您需要一个 class 代表您的第二个对象——您要映射到的对象。您需要完成该对象以确保每个 属性 都可以被初始化——这对我来说输入太多了。
另请注意,您有一些 属性 名称包含空格,我已删除这些空格。空格不适用于 属性 个名称。此 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 = ...
}
}
完成后,您现在可以遍历创建 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 数组有一个 .forEach() 方法,该方法将为数组中的每个项目调用一个函数——将数组中的每个项目作为参数传递。
在我的示例中,我实现了一个包含两个语句的箭头函数:
- 映射到新对象
- 输出到控制台。
这是一个完整的示例:
// 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);
});
我想从 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”,它逐渐增加。
非常感谢。
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 Notation。 这意味着任何有效的 JSON 都是 JavaScript 对象的字符串化(或序列化)版本。 这意味着我们可以直接从 JSON 字符串中简单地创建一个内存对象,如下所示:(有限的例子以保持它的小)
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
},
]
完成后,您需要一个 class 代表您的第二个对象——您要映射到的对象。您需要完成该对象以确保每个 属性 都可以被初始化——这对我来说输入太多了。 另请注意,您有一些 属性 名称包含空格,我已删除这些空格。空格不适用于 属性 个名称。此 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 = ...
}
}
完成后,您现在可以遍历创建 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 数组有一个 .forEach() 方法,该方法将为数组中的每个项目调用一个函数——将数组中的每个项目作为参数传递。
在我的示例中,我实现了一个包含两个语句的箭头函数:
- 映射到新对象
- 输出到控制台。
这是一个完整的示例:
// 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);
});