JSON到Java对象而不创建类(PHP方式)
我正在处理从twitterapi获取的json数据 在PHP上,我通常会执行以下操作:JSON到Java对象而不创建类(PHP方式),java,php,json,object,Java,Php,Json,Object,我正在处理从twitterapi获取的json数据 在PHP上,我通常会执行以下操作: $data=json\u解码($response) 而$data将是STD类对象 我想用Java做同样的事情 我看了一下Gson,但我需要第二个参数,它似乎需要为获取的数据创建一个特定的类 基本问题是如何将JSON转换为PHP中的标准Java对象(STD类对象) 谢谢Java中没有标准的类对象,因此您需要一个类。您可以在运行时动态创建和编译该类,但我怀疑这是否值得麻烦。如果您的JSON数据没有遵循特定的结构,
$data=json\u解码($response)代码>
而$data
将是STD类对象
我想用Java做同样的事情
我看了一下Gson,但我需要第二个参数,它似乎需要为获取的数据创建一个特定的类
基本问题是如何将JSON转换为PHP中的标准Java对象(STD类对象)
谢谢Java中没有标准的类对象,因此您需要一个类。您可以在运行时动态创建和编译该类,但我怀疑这是否值得麻烦。如果您的JSON数据没有遵循特定的结构,请不要使用GSON,而是使用常规JSON库(如中的库),该库将为您提供类的实例,如JSONObject
,当PHP服务器上不存在json_encode时,您可以从中访问数据,如jsonObject.getString(“key”)
,我使用以下方法:
<?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重写它,那么它应该适合你
参考:(死链接)使用Jackson将其读入地图,然后您可以访问任何您想要的数据。例如,如果您的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" );
ObjectMapper mapper=new ObjectMapper();
Map mystuff=mapper.readValue(jsonString,Map.class);
字符串名称=(字符串)mystuff.get(“名称”);
字符串city=((Map)mystuff.get(“地址”).get(“城市”);
+1 json.org-在大多数情况下简单且足够(在您的答案中添加了到json.org的链接-希望您不介意),这可以解决问题,但如何访问对象中的嵌套对象?@bn-通过调用jsonObject.getObject(“key”)
。阅读javadocs。如果你不想拥有一个类,你想如何获得一个对象?也许我不理解您最初的问题,例如,我想访问PHP$data->resultset->result->username中的嵌套对象。我如何在Java中做到这一点?这似乎很简单。我将尝试这个方法。我在几个单元测试中使用了这个方法,测试生成JSON的代码,效果很好。它非常简单,Jackson也很快;给了我一个问题,它是一个对象,而不是字符串。添加了.toString()来修复它