【问题标题】:How can I add an object inside another object (NodeJS, Axion, Cheerio, jQuery, JSON)如何在另一个对象(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

标签: jquery arrays node.js json object


【解决方案1】:

请参见下面的示例。循环遍历内部子代,并将找到的对象情节推入对象episodesdata.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()
                  });
                });
            });

【讨论】:

  • 谢谢!这行得通,这就是我一直在寻找的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多