如何在另一个对象(NodeJS、Axion、Cheerio、jQuery、JSON)中添加一个对象
Posted
技术标签:
【中文标题】如何在另一个对象(NodeJS、Axion、Cheerio、jQuery、JSON)中添加一个对象【英文标题】:How can I add an object inside another object (NodeJS, Axion, Cheerio, jQuery, JSON) 【发布时间】:2020-05-27 05:54:57 【问题描述】:我正在尝试使用 NodeJS 来学习 Axion 和 Cheerio 进行 Web Scraping... 我做得很好,直到我在尝试将获取的数据很好地保存到 JSON 文件中时偶然发现了一个问题。 我一直在为数组、对象和格式化 JSON 文件而苦恼……如果有人能帮我一点忙,或许可以链接一些有用的资源,我将不胜感激。
这是我现在正在使用的代码:
if (response.status === 200)
const html = response.data;
let $ = cheerio.load(html);
const data =
animes:
details: [],
episodes: []
;
$('.item').each(function (i)
data.animes.details.push(
id: i - 3,
title: $(this).children('.inner').children('.name').text().trim(),
url: $(this).children('.inner').children('.name').prop('href'),
poster: $(this).children('.inner').children('.poster').children('img').prop('src')
);
data.animes.episodes.push(
episode: $(this).children('.inner').children('a').children('.status').children('.ep').text().trim()
);
);
data.animes.details = data.animes.details.slice(4, -21);
fs.writeFile('data/animes.json',
JSON.stringify(data, null, 4), (err) =>
console.log('File successfully written!');
);
目前我的 JSON 文件如下所示:
"weeb":
"details": [
"id": 1,
"title": "Some title 1",
"url": "https://placeholder.com",
"poster": "https://lets-imagine-a-picture.com/picture01.jpg"
,
"id": 2,
"title": "Some title 2",
"url": "https://placeholder.com",
"poster": "https://lets-imagine-a-picture.com/picture01.jpg"
],
"episodes": [
"episode": "3/12"
,
"episode": "13/32"
]
我希望我的 JSON 文件如下所示:
"weeb":
"details": [
"id": 1,
"title": "Some title 1",
"url": "https://placeholder.com",
"poster": "https://lets-imagine-a-picture.com/picture01.jpg",
"episodes": [
"episode-01": "https://some-nifty-link.com/episode01",
"episode-02": "https://some-nifty-link.com/episode02",
...
]
,
"id": 2,
"title": "Some title 2",
"url": "https://placeholder.com",
"poster": "https://lets-imagine-a-picture.com/picture01.jpg",
"episodes": [
"episode-01": "https://some-nifty-link.com/episode01",
"episode-02": "https://some-nifty-link.com/episode02",
...
]
]
【问题讨论】:
请随意推荐一个更好的结构来做这件事,如果我真的想做错了:'D 【参考方案1】:请参见下面的示例。循环遍历内部子代,并将找到的对象情节推入对象episodes
中data.animes.details[i]
的数组索引中。我认为这不是最简洁的解决方案。但如果孩子们的钥匙是正确的,它应该可以工作。
if (response.status === 200)
const html = response.data;
let $ = cheerio.load(html);
const data =
animes:
details: [],
;
$('.item').each(function (i)
data.animes.details.push(
id: i - 3,
title: $(this).children('.inner').children('.name').text().trim(),
url: $(this).children('.inner').children('.name').prop('href'),
poster: $(this).children('.inner').children('.poster').children('img').prop('src')
);
$(this).children('.inner').each(function (j)
data.animes.details[i].episodes.push(
episode: $(this).children('.inner').children('a').children('.status').children('.ep').text().trim()
);
);
);
【讨论】:
谢谢!这行得通,这就是我一直在寻找的东西以上是关于如何在另一个对象(NodeJS、Axion、Cheerio、jQuery、JSON)中添加一个对象的主要内容,如果未能解决你的问题,请参考以下文章