如何在另一个对象(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】:

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

【讨论】:

谢谢!这行得通,这就是我一直在寻找的东西

以上是关于如何在另一个对象(NodeJS、Axion、Cheerio、jQuery、JSON)中添加一个对象的主要内容,如果未能解决你的问题,请参考以下文章

Nodejs实现爬虫抓取数据

在nodejs中使用azure blob存储触发器在另一个容器中压缩和写入文件

如何在另一个对象列表中选择对象列表

量角器 - 如何检查对象是不是包含在另一个对象中?

如何在另一个类中调用列表对象

我如何判断一个 joda-time DateTime 对象是不是在另一个对象的 4 小时内?