当前位置: 首页 > 知识库问答 >
问题:

如何在for each循环中填写列表?

冀弘厚
2023-03-14

我正在尝试将POJO的jackson JSON字符串转换为JSON文件以导入MySQL。

try {
        //HtmlPage object contains the html code
        HtmlPage page = client.getPage(baseUrl);
        //System.out.println(page.asXml());

        //Selecting nodes with xpath
        List<HtmlElement> itemList = page.getByXPath("//tr[@class='athing']");

        List<HackerNewsItem> fullList = new ArrayList<>();

        if(itemList.isEmpty()) {
            System.out.println("No item found");
        }else {
            for(HtmlElement htmlItem : itemList){
                int position = Integer.parseInt(((HtmlElement) htmlItem.getFirstByXPath("./td/span")).asText().replace(".", ""));
                int id = Integer.parseInt(htmlItem.getAttribute("id"));
                String title =  ((HtmlElement) htmlItem.getFirstByXPath("./td[not(@valign='top')][@class='title']")).asText();
                String url = ((HtmlAnchor) htmlItem.getFirstByXPath("./td[not(@valign='top')][@class='title']/a")).getHrefAttribute();
                String author =  ((HtmlElement) htmlItem.getFirstByXPath("./following-sibling::tr/td[@class='subtext']/a[@class='hnuser']")).asText();
                int score = Integer.parseInt(((HtmlElement) htmlItem.getFirstByXPath("./following-sibling::tr/td[@class='subtext']/span[@class='score']")).asText().replace(" points", ""));

                HackerNewsItem hnItem = new HackerNewsItem(title, url, author, score, position, id);

                ObjectMapper mapper = new ObjectMapper();

                String jsonString = mapper.writeValueAsString(hnItem) ;


                System.out.println(jsonString);
                mapper.writeValue(Paths.get("hackernewsitem2.json").toFile(), fullList.add(hnItem));

            }
          
        }

    }catch (Exception e) {
        e.printStackTrace();
    }

我遇到的问题是,即使我在控制台中返回了JSON字符串,并且。json文件创建后,MySQL workbench抛出一个未处理的错误异常:bool()类型的对象没有长度 作为一个json文件,行为“true”。

如果我做mapper.write值(Paths.get("hackernewsitem.json"). toFile(), hnItem);文件被正确导入,但数据库中没有数据,如果被视为json,则只有一行。

我的POJO

@Getter@Setter@AllArgsConstructor
public class HackerNewsItem {

    @JsonProperty("item_title")
    private String title;

    @JsonProperty("item_url")
    private String url;

    @JsonProperty("item_author")
    private String author;

    @JsonProperty("item_score")
    private int score;

    @JsonProperty("item_position")
    private int position;

    @JsonProperty("item_id")
    private int id;

}

共有1个答案

常飞翼
2023-03-14

你想在for循环中填充列表吗?实际上,您已经在循环之前创建了完整列表,所以您只需要利用它。创建HackerNewsItem后,只需将其添加到列表中。

HackerNewsItem hnItem = new HackerNewsItem(...);
fullList.add(hnItem);

当for循环完成时,您的完整列表中有所有项目。

编辑:不要在循环中保存列表。这会给你带来奇怪的结果。因此,将ObjectMapper移到循环下方。这部分应该看起来像

ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(hnItem) ;
System.out.println(jsonString);
mapper.writeValue(Paths.get("hackernewsitems.json").toFile(), fullList);
 类似资料:
  • 问题内容: 我有四个foreach循环,这些循环遍历集合并根据条件进行操作。 这是我现在正在编写的代码: 主要对象(代码中的对象)来自第三方提供程序SDK,因此我无法在该部分上进行任何更改。我想问一下Stack Overflow社区是否有更好的方法来打破所有四个foreach循环。或者,如果还有其他方法可以重构此代码,使其更具可读性和可维护性。 问题答案: 在最外面的循环上使用标签,当您想跳出所有

  • foreach循环遍历列表值并将控制变量(var)依次设置为列表的每个元素 - 语法 (Syntax) Perl编程语言中foreach循环的语法是 - foreach var (list) { ... } 流程图 (Flow Diagram) 例子 (Example) #!/usr/local/bin/perl @list = (2, 20, 30, 40, 50); # foreach lo

  • 本文向大家介绍如何在PowerShell foreach并行循环中使用PSCustomObject?,包括了如何在PowerShell foreach并行循环中使用PSCustomObject?的使用技巧和注意事项,需要的朋友参考一下 要在Foreach并行循环内使用PSCustomObject ,我们首先需要考虑如何在循环内使用变量。 因此,让我们看看是否可以在$out变量中存储或更改值。 示例

  • 问题内容: 我想遍历一个数组,以检查是否存在一个值。如果该值确实存在,我想删除包含它的元素。 我有以下代码: 找到值后,我不知道如何删除该元素。如何删除? 我必须使用这个问题。可能有替代方法,欢迎您共享它们。 问题答案: 如果您还获得了密钥,则可以这样删除该项目:

  • 除了前面介绍的几种循环语句外,C# 同样也支持 foreach 循环,使用 foreach 可以遍历数组或者集合对象中的每一个元素,其语法格式如下: foreach(数据类型 变量名 in 数组或集合对象){     语句块; } foreach 会在每次循环的过程中,依次从数组或集合对象中取出一个新的元素放到 里定义的变量中,直到所有元素都成功取出后退出循环。 【示例】使用 foreach 循环