繁体   English   中英

如何从URL读取JSON数据到XPage Java Bean

[英]How to read JSON data from URL into XPage Java Bean

我知道这通常是使用Client Side JavaScript更好的方法。 然而,出于其他原因,CSJS在这种情况下并不理想。

但是如果我在XPage中有一个Java对象。 托管bean可能或其他什么。 是否可以将JSON信息读入对象以进行解析? 从理论上讲,我想要处理数据并在TypeAhead中使用它来进行编辑框控件。

我对此感兴趣而不是使用更传统的多米诺骨牌对象模型的原因是获得条目的速度。 我想知道使用伟大的“startkey”参数的视图是否比getAllEntriesByKey()更快。

例如这个视图: http//xpagescheatsheet.com/fakenames.nsf/1fcbbeb633d9fdb3852576480057a7dc?ReadViewEntries&outputformat=JSON&StartKey=Fav

总结一下,我想看看是否有可能将来自该链接的数据从XPages中压入Java对象。 关键可以是任何东西......不一定是“收藏”。

谢谢!

该问题分为两部分:

  1. 如何从URL读取数据。 在这里,Oliver提供了提示:使用Apache HTTP客户端(库是XPages中的)
  2. 如何将JSON转换为Java对象。 在这里,我将使用谷歌GSON和匹配的对象。 Apache HTTP客户端允许您访问正文的输入流。 就像是

    SomeClass createFromJson(InputStream in) { Gson gson = new GsonBuilder().create(); SomeClass sc = gson.fromJson(in, SomeClass.class); return sc; }

我绝对支持Stefan建议的方式 - 而且我自己这样做。

如果您将Gson包装在插件中,则需要注意安全性和权限。 我刚刚写了一篇关于这个的文章 (以Gson为例)

但是,如果您不想在应用程序中添加额外的库,那么您还可以使用内置的JSON功能(在包中:com.ibm.commons.util.io.json)来获取相同的内容 - 尽管不在同样优雅的方式。

这是一个小例子:

JsonJavaFactory factory = JsonJavaFactory.instanceEx;
Object jsonObjs;
try {
    String url = "http://.....";
    jsonObjs = JsonParser.fromJson(factory, new BufferedReader(new InputStreamReader(new URL(url).openStream())));
    for (Iterator<Object> val = factory.iterateArrayValues(jsonObjs); val.hasNext();) {
        JsonJavaObject obj = (JsonJavaObject) val.next();
        Double idNum = (Double) obj.getJsonProperty("id");
        String id = Integer.toString(idNum.intValue());
        if (StringUtil.isNotEmpty(id)) {
            String name = (String) obj.getJsonProperty("name");
            // Do something with id and name...
        }
    }
} catch (JsonException e) {
    e.printStackTrace();
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();

/约翰

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM