我不是一个程序员,所以我缺乏基本知识。
我想创建一个桌面应用程序,一个字典,你搜索一个词,你有一个简短的定义。
我利用他们。
https://api.lexicala.com/
然后这里是我的脚本的一部分贝娄。
我的问题是,对于我所寻找的每一个部分,这个词的含义,它的性质,等等。
我必须使这个解封装代码行。//编辑:解封装=反序列化
response.getBody().getObject().getJSONArray("results").getJSONObject(0).getJSONObject("headword").get("text")
如果Json不是每次都更改,则没有问题,但它确实更改了。
一个形容词和一个名词完全改变了结构,我得到了一个错误。
Json对象现在是Json数组。
我想知道是否有一种简单的方法,无论是Jackson,还是Gson或Json,都可以简单地问这样的问题
Json.Parse (JsonResponse);
get("Definition");
而不是
Object Resultat4 = response.getBody().getObject().getJSONArray("results").getJSONObject(0).getJSONArray("senses").getJSONObject(0).get("definition");
并且只拥有内容,而不需要经过所有这些不断变化的代码行。
谢谢你在这件事上帮我。
//Values
String motacherch = "grand";
public void gettest(){
HttpResponse<JsonNode> response = Unirest.get("https://dictapi.lexicala.com/search?source=global&language=fr&text="+motacherch)
.basicAuth("user", "password")
.asJson();
JSONObject responsejson = (JSONObject) response.getBody().getObject();
System.out.println( responsejson);
Object Resultat = response.getBody().getObject().get("n_results");
System.out.println( "Le nombre de resultats est:"+ Resultat);
Object Resultat2 = response.getBody().getObject().getJSONArray("results").getJSONObject(0).getJSONObject("headword").get("text");
System.out.println( "Le mot que l'on cherche est: "+ Resultat2);
Object Resultat3 = response.getBody().getObject().getJSONArray("results").getJSONObject(0).getJSONObject("headword").get("pos");
System.out.println( "C'est un: "+ Resultat3);
Object Resultat4 = response.getBody().getObject().getJSONArray("results").getJSONObject(0).getJSONArray("senses").getJSONObject(0).get("definition");
System.out.println( "Definition: "+ Resultat4);
System.out.println( "---------------------------------------------" );
HttpResponse<JsonNode> response2 = Unirest.get("https://dictapi.lexicala.com/users/me")
.basicAuth("", "")
.asJson();
//System.out.println( response2.getBody());
JSONObject responsejson2 = response2.getBody().getObject();
JSONObject results = responsejson2.getJSONObject("usage").getJSONObject("today");
Object results2=results.get("count");
System.out.println( results2);
}
2条答案
按热度按时间ncgqoxb01#
最简单的方法是将json解析(反序列化)为java
Map<String, Object>
,使用您喜欢的库(尝试Jackson或gson)总是成功的(值本身可能是Map)。然后检查贴图的关键点以确定如何处理它。
更难但更“正确”的方法是反序列化到由有效负载的属性选择的各种类,但在这种情况下我不会,因为API设计听起来有点古怪。
下面是一些将json解析为map的代码:
为了更容易地访问Map值,您可能会发现此helper方法可以方便地执行推理转换:
使用方法如下:
ct3nt3jp2#
Json:
部分代码: