簡體   English   中英

將查詢字符串參數解析為Java對象

[英]Parse a query string parameter to java object

我有這樣的查詢字符串:

ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife&Content=racroi&TimeStamp=2012-11-05T17:20:06.056

我有Java對象:

LogObject{
    private String ObjectGUId;
    private String ObjectType;
    private String ObjectTitle;
    private String Content;
    private String TimeStamp;
}

所以我想將此查詢字符串解析為該java對象。

我已經搜索並閱讀了許多問題,但尚未獲得正確的答案。

告訴我什么可以解決這個問題。

如果您確實不需要將查詢字符串放入自己的類中(盡管您可能希望這樣做),則可以使用URLDecoder代替手動解析它,就像@Sonrobby所說的那樣:

String qString = "ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife";
Uri uri = Uri.parse(URLDecoder.decode("http://dummy/?" + qString, "UTF-8"));
if (uri != null) {
    for(String key: uri.getQueryParameterNames()) {
        System.out.println("key=[" + key + "], value=[" + uri.getQueryParameter(key) + "]");
    }
}            

“虛擬”看上去很臟,但是如果您僅有的是查詢字符串值(qString),則它是必需的。 如果您具有完整的URL,只需將其直接傳遞給URLDecoder,就可以完成。

禮儀

  1. 您確實應該更加詳細地說明您嘗試過的內容以及為什么它不起作用。

  2. 正確的LogObject代碼示例在這里確實很有幫助。

  3. 理想情況下,您應該提供一個SSCCE,以便其他人可以輕松地測試您自己的問題。

回答

您可以像這樣提取name:value對:

String toParse = "ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife&Content=racroi&TimeStamp=2012-11-05T17:20:06.056";
String[] fields = toParse.split("&");
String[] kv;

HashMap<String, String> things = new HashMap<String, String>();


for (int i = 0; i < fields.length; ++i)
{
    t = fields[i].split("=");
    if (2 == kv.length)
    {
        things.put(kv[0], kv[1]); 
    }
}

我選擇將它們放入HashMap中,但是您可以輕松地查看名稱部分( kv[0] )並選擇對其進行處理。 例如:

if kv[0].equals("ObjectGUId")
{
    logObject.setGUId(kv[1]); // example mutator/setter method
}
else if //...

但是,您在LogObject中的所有字段都是私有的,並且您沒有向我們展示任何方法,因此,我希望您可以從外部設置它們的方式...請記住,您需要將這些對存儲在某些數據結構中如果您打算LogObject具有所有字段的LogObject而不是在構造函數調用之后設置字段,則使用這種方法(就像我對HashMap所做的那樣)。

說到SSCCE, 我為此做了一個答案

受@ bruno.braga的啟發,這是使用Apache http-components的一種方法。 您可以利用所有解析極端情況:

List<NameValuePair> params = 
    URLEncodedUtils.parse("http://example.com/?" + queryString, Charset.forName("UTF-8"));

這將為您提供易於使用的NameValuePair對象列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM