簡體   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