Java Gson通过对象模型解析文本/纯文本不';不隔离字段,但打印所有
我有一个字符串,其中包含Java Gson通过对象模型解析文本/纯文本不';不隔离字段,但打印所有,java,json,gson,htmlunit,Java,Json,Gson,Htmlunit,我有一个字符串,其中包含json数据,格式为text/plain,由web响应返回。我试图通过谷歌的Gson库从mail键中获取特定值。然而,在谷歌上做了一些例子之后,我仍然无法得到邮件的价值。相反,它返回字符串中包含的所有数据 public class EmailData { public String mail; public String getMail() { return mail; } } 通过链接返回的响应具有ff(text/plain)
json
数据,格式为text/plain
,由web响应返回。我试图通过谷歌的Gson库从mail键中获取特定值。然而,在谷歌上做了一些例子之后,我仍然无法得到邮件的价值。相反,它返回字符串中包含的所有数据
public class EmailData {
public String mail;
public String getMail() {
return mail;
}
}
通过链接返回的响应具有ff(text/plain
)。这是浏览器和控制台上显示的内容
{
"search": {
"entry": [
{
"dn": "uid=C12345678,c=ph,ou=pages,o=website.com",
"attribute": [
{
"name": "mail",
"value": [
"myemail123@website.com"
]
},
{
"name": "employeecountrycode",
"value": [
"818"
]
},
{
"name": "dept",
"value": [
"ABC"
]
}
],
"return": {
"code": 0,
"message": "Success",
"count": 1
}
}
]
}
}
我希望能够仅获取mail
的值,即myemail123@website.com
所以我尝试的是这个
public class Test {
public static void main(String[] args) {
String linkReturningJsonTextPlain = "http://....";
try (WebClient webClient = new WebClient();){
Page page = webClient.getPage(linkReturningJsonTextPlain);
WebResponse response = page.getWebResponse();
String jsonString = response.getContentAsString();
Gson gson = new Gson();
EmailData emailData = gson.fromJson(jsonString, EmailData.class);
System.out.println(emailData.getMail());
} catch (Exception e) {
e.printStackTrace();
}
}
我得到了jsonString
中包含的所有数据,而不是myemail123@website.com
我做错了什么?我遵循所有的例子。打印response.getContentType()
我现在的最后一个选择是手动拆分json字符串和子字符串(ing)
谢谢。在json格式中,您无法将EmailData类转换回。json格式应为<代码>{“邮件”:mail@example.com“} 以代码为例: EmailData类
package gson;
public class EmailData {
private String mail;
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
@Override
public String toString() {
return "EmailData{" +
"mail='" + mail + '\'' +
'}';
}
}
用于显示Gson如何转换的测试类
package gson;
import com.google.gson.Gson;
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
EmailData emailData = new EmailData();
emailData.setMail("mail@example.com");
String toJson = gson.toJson(emailData);
System.out.println("toJson = " + toJson);
EmailData fromJson = gson.fromJson(toJson, EmailData.class);
System.out.println("fromJson = " + fromJson);
}
}
在本例中,我将EmailData类转换为json并返回。为了解决您的问题,我建议您使用正则表达式还是Json来提取电子邮件,如本文所示,并通过构造函数手动创建EmailData类。我写这个答案是为了参考那些可能会遇到问题的人,他们可能会从包含
数组值的一串键中提取记录json响应
给定上面文本格式的json数据,这就是我如何从mail元素中获取值的方法
JsonArray attribute_Array = jsonObject.getAsJsonObject("search").
getAsJsonArray("entry").get(0).getAsJsonObject().getAsJsonArray("attribute");
String email = "not found";
for (JsonElement e : attribute_Array) {
String key = e.getAsJsonObject().get("name").toString().replace("\"", "");
if(key.equals("mail")){
email = e.getAsJsonObject().get("value").toString();
}
}
初始值为“未找到””的电子邮件将被json元素mail包含的任何值替换
如您所见,entry
和attribute
都作为参数传递给了getAsJsonArray()
,因为它们都有值数组
我相信这将帮助其他可能在从Json内的嵌套数组中提取值时感到困惑的人
感谢@Velaniv Jr,您提供的链接起到了帮助