2011-12-08 22 views
1

我處理的來自Twitter的API獲取JSON數據JSON無需創建類(PHP方式)的Java對象

在PHP我常做這樣的事情:

$data = json_decode($response);$data將STD類對象

我想在Java中做同樣的事情。

我看了一下Gson,但我需要第二個參數,好像我需要爲獲取的數據創建特定的類。

的基本問題是我如何轉換JSON爲標準Java對象像PHP(STD類對象)

謝謝

回答

2

讀入使用傑克遜,那麼你可以訪問你想要的任何數據的地圖。舉例來說,如果你的JSON看起來像這樣

{ "name":"blah", 
    "address": { 
    "line1": "1234 my street", 
    "city": "my city", 
    "state": "my state" 
    } 
} 

,那麼你可以:

ObjectMapper mapper = new ObjectMapper(); 
Map<String, Object> mystuff = mapper.readValue(jsonString, Map.class); 
String name = (String)mystuff.get("name"); 
String city = ((Map<String, Object>)mystuff.get("address")).get("city"); 
+0

這看起來很簡單。我將嘗試這 – bbnn

+0

我在幾個單元測試中使用它,我在測試生成JSON的代碼,它運行良好。這很簡單,傑克遜很快。 – digitaljoel

0

有沒有在java標準類對象,因此你需要一個類。你可以在運行時動態地創建和編譯這個類,但是我懷疑這是值得的。

3

如果你的JSON數據不遵循特定的結構,不要使用GSON,而是一個普通的JSON庫(比如從json.org一)會給你一個類的實例像JSONObject,從中你可以訪問數據如jsonObject.getString("key")

+0

+1 json.org - 簡單的和足夠的在大多數情況下(加鏈接json.org上你的答案 - 希望你不要介意) – ManseUK

+0

這可以解決這個問題,但我怎樣才能訪問對象內的嵌套對象? – bbnn

+0

@bn - 通過調用'jsonObject.getObject(「key」)''。閱讀javadocs。 –

-1

當json_encode沒有一個PHP服務器上,我用這個:

<?php 
if (!function_exists('json_encode')) 
{ 
    function json_encode($a=false) 
    { 
    if (is_null($a)) return 'null'; 
    if ($a === false) return 'false'; 
    if ($a === true) return 'true'; 
    if (is_scalar($a)) 
    { 
     if (is_float($a)) 
     { 
     // Always use "." for floats. 
     return floatval(str_replace(",", ".", strval($a))); 
     } 

     if (is_string($a)) 
     { 
     static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"')); 
     return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"'; 
     } 
     else 
     return $a; 
    } 
    $isList = true; 
    for ($i = 0, reset($a); $i < count($a); $i++, next($a)) 
    { 
     if (key($a) !== $i) 
     { 
     $isList = false; 
     break; 
     } 
    } 
    $result = array(); 
    if ($isList) 
    { 
     foreach ($a as $v) $result[] = json_encode($v); 
     return '[' . join(',', $result) . ']'; 
    } 
    else 
    { 
     foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v); 
     return '{' . join(',', $result) . '}'; 
    } 
    } 
} 
?> 

如果你可以在Java中重寫這個,那麼它應該在招你。

參考:(死鏈接)http://snippets.dzone.com/posts/show/7487