我處理的來自Twitter的API獲取JSON數據JSON無需創建類(PHP方式)的Java對象
在PHP我常做這樣的事情:
$data = json_decode($response);
和$data
將STD類對象
我想在Java中做同樣的事情。
我看了一下Gson,但我需要第二個參數,好像我需要爲獲取的數據創建特定的類。
的基本問題是我如何轉換JSON爲標準Java對象像PHP(STD類對象)
謝謝
我處理的來自Twitter的API獲取JSON數據JSON無需創建類(PHP方式)的Java對象
在PHP我常做這樣的事情:
$data = json_decode($response);
和$data
將STD類對象
我想在Java中做同樣的事情。
我看了一下Gson,但我需要第二個參數,好像我需要爲獲取的數據創建特定的類。
的基本問題是我如何轉換JSON爲標準Java對象像PHP(STD類對象)
謝謝
讀入使用傑克遜,那麼你可以訪問你想要的任何數據的地圖。舉例來說,如果你的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");
有沒有在java標準類對象,因此你需要一個類。你可以在運行時動態地創建和編譯這個類,但是我懷疑這是值得的。
當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中重寫這個,那麼它應該在招你。
這看起來很簡單。我將嘗試這 – bbnn
我在幾個單元測試中使用它,我在測試生成JSON的代碼,它運行良好。這很簡單,傑克遜很快。 – digitaljoel