【问题标题】:Wicket : pass json to ListView in javaWicket:将 json 传递给 java 中的 ListView
【发布时间】:2016-11-24 17:43:35
【问题描述】:
List userList = Arrays.asList(
            new User[] {
                new User("FirstA", "LastA"),
                new User("FirstB", "LastB"),
                new User("FirstC", "LastC")
              });


    add(new ListView("listview", userList) {
        protected void populateItem(ListItem item) {
            User user = (User) item.getModelObject();
            item.add(new Label("firstname", user.getFirstname()));
            item.add(new Label("lastname", user.getLastname()));
        }
    });

上述代码从 List userList 中添加值,并在 Table 中显示 Firstname 和 LastName。

我需要将 JSONObject 传递给 ListView。

Json 架构 -

{"schema":[{"name":"John","id":"01"},{"name":"Sam","id":"02"}]}

Json 是从数据库传递过来的 -

JSONObject json=widget.getJsonForTableContent(query); //QUERY from Database
    json.toString();
    System.out.println(json);  //Prints json - {"schema":[{"name":"John","id":"01"},{"name":"Sam","id":"02"}]}
    Iterator<String> iter=json.keys();
    while(iter.hasNext())
    {
        String key = iter.next();
        System.out.println(key); //prints only "schema" from json in console
    }

键值仅在控制台中打印“模式”。 如何解析和迭代 json 以打印“name”和“id”并将这些值传递给 ListView 以显示在 wicket Table 中

我只是一个初学者。任何帮助将不胜感激。谢谢

【问题讨论】:

  • 假设您正在寻找最有效的方法,建议使用标准 JSON 解析器 API,如下面的回答所示。如果目标是学习如何解析复杂的表达式,那么问题/答案需要采用不同的框架。

标签: java json listview iterator wicket


【解决方案1】:

这是JSON parser/附加overview with examples的标准API

概述提供了使用 API 从 InputStream 解析 JSON 的示例:

URL url = new URL("https://graph.facebook.com/search?q=java&type=post");
try (InputStream is = url.openStream();
      JsonParser parser = Json.createParser(is)) {
    while (parser.hasNext()) {
         Event e = parser.next();
         if (e == Event.KEY_NAME) {
             switch (parser.getString()) {
                case "name":
                    parser.next();
                    System.out.print(parser.getString());
                    System.out.print(": ");
                    break;
                case "message":
                    parser.next();
                    System.out.println(parser.getString());
                    System.out.println("---------");
                    break;
             }
         }
     }
 }

不确定最终会从哪里获取 JSON 数据,但如果您想使用静态字符串对其进行测试,您可以将字符串转换为输入流,如下所示:

InputStream stream = new ByteArrayInputStream(json.toString().getBytes(StandardCharsets.UTF_8));

至于您问题的 ListView 部分 - 一旦您解析出令牌以将它们添加到 ListView 中,就像您所做的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多