我正在搜索良好和动态方式来解析Java中的JSON。 我见过这样的事情:
List<String> list = new ArrayList<String>();
JSONArray array = obj.getJSONArray("test");
for(int i = 0 ; i < array.length() ; i++){
list.add(array.getJSONObject(i).getString("testKey"));
}
但那是不我正在搜索的内容。在C#中我有类似的东西:
dynamic results = JsonConvert.DeserializeObject<dynamic>(json);
info.Text = results["test"]["testKey"];
以下是我的JSON示例:
{"date":"07.05.2017 11:44",
"monday":{"1":{"subject":"test","room":"test","status":"test"}}}
所以我想做一下:
results["monday"]["1"]["subject"];
我希望有人了解我的问题并且可以帮助我。 提前谢谢!
答案 0 :(得分:1)
核心Java运行时不提供JSON解析器(编辑:技术上,它确实如此,请参阅答案的底部),因此您将需要一个库。见杰克逊,格森,也许还有其他人。
即使这样,您也无法获得所需的动态功能,因为Java是静态类型的。杰克逊的例子:
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(json, new TypeReference<Map<String, Object>>(){});
map.get("monday").get("1").get("subject");
^^^
This fails because the result of get("monday") is Object, not Map
&#34;对&#34; Java-land中的方法是创建一个表示JSON模型的类(或类集),并将其传递给JSON解析器&#34;对象映射器&#34;。但你说&#34;动态&#34;所以我不在这里探讨这个问题。
因此,当您知道它不是原始值时,您需要转换为Map:
((Map<String,Map<String,String>>)map.get("monday")).get("1").get("subject");
这有效但有关未经检查的演员的警告......
总而言之,Java不是一种动态语言,我认为没有办法完全按照你的意愿行事(也许我错过的方法仍然比我建议的稍微容易一些)。
您是否仅限于Java-the-language或Java-the-platform?在后一种情况下,您可以使用Java平台的动态语言,例如Groovy,它具有解析JSON的出色功能。
编辑:一个有趣的选择是使用Java自己的JavaScript实现。这很有效,而且很容易动态,但我不知道它是不是很好&#34;: String json = "{\"date\":\"07.05.2017 11:44\",\n" +
"\"monday\":{\"1\":{\"subject\":\"test\",\"room\":\"test\",\"status\":\"test\"}}}";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.put("data", json);
System.out.println(engine.eval("JSON.parse(data)['monday']['1']['subject']"));
答案 1 :(得分:1)
如果您确定要获得的价值,那么您也可以执行以下操作:
String str = "{\"date\":\"07.05.2017 11:44\", \"monday\":{\"1\":{\"subject\":\"test\",\"room\":\"test\",\"status\":\"test\"}}}";
JSONObject results= new JSONObject(str);
String str1 = results.getJSONObject("monday").getJSONObject("1").getString("subject");
System.out.println(str1);
对于数组类型的结果,我们必须为此编写逻辑。在这种情况下,使用 org.json 库。
答案 2 :(得分:0)
您可以使用GCON库: https://github.com/google/gson
非常适合解析JSON对象。