【问题标题】:Java JSON parsing with Jackson使用 Jackson 解析 Java JSON
【发布时间】:2018-12-27 14:17:08
【问题描述】:

我正在尝试通过查看此处的玩具示例来了解 Jackson 进行 JSON 解析的窍门: http://wiki.fasterxml.com/JacksonInFiveMinutes

JSON:

{
  "name" : { "first" : "Joe", "last" : "Sixpack" },
  "gender" : "MALE",
  "verified" : false,
  "userImage" : "Rm9vYmFyIQ=="
}

我在使用“原始”数据绑定 sn-ps 时遇到问题:

1 ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
2 Map<String,Object> userData = mapper.readValue(new File("user.json"), Map.class);

“name”的值是 {first=Joe, last=Sixpack}。当然,原始数据绑定可以处理嵌套的 JSON 对象,但我不知道如何访问 first 和 last 的值。我做错了什么?

【问题讨论】:

  • 该键 (name) 的 Object 是 Map 吗?只需投射它并使用这些键(第一个,最后一个)访问它。
  • 杰克逊会尽其所能,name 的关键是Map&lt;String, String&gt;。当你.get()它时,只需投射它。
  • @fge 你的意思是键name的值吗?
  • ((Map) userData.get("name")).get("first");
  • 谢谢你们! +业力

标签: java json jackson


【解决方案1】:

我知道已经晚了,但我就是这样做的。请看下文。

MainClass.java=

import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

 public class MainClass {

public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

    String jsonStr = "{\r\n" + "  \"name\" : { \"first\" : \"Joe\", \"last\" : \"Sixpack\" },\r\n"
            + "  \"gender\" : \"MALE\",\r\n" + "  \"verified\" : false,\r\n"
            + "  \"userImage\" : \"Rm9vYmFyIQ==\"\r\n" + "}";

    ObjectMapper mapper = new ObjectMapper();

    EntityClass jsonObj = mapper.readValue(jsonStr, EntityClass.class);

    System.out.println(jsonObj.getName().getFirst());
    System.out.println(jsonObj.getName().getLast());
    System.out.println(jsonObj.getGender());
    System.out.println(jsonObj.getVerified());
    System.out.println(jsonObj.getUserImage() + "\n");

}

}

EntityClass.java=

  public class EntityClass
  {
          private String verified;

private Name name;

private String userImage;

private String gender;

public String getVerified ()
{
    return verified;
}

public void setVerified (String verified)
{
    this.verified = verified;
}

public Name getName ()
{
    return name;
}

public void setName (Name name)
{
    this.name = name;
}

public String getUserImage ()
{
    return userImage;
}

public void setUserImage (String userImage)
{
    this.userImage = userImage;
}

public String getGender ()
{
    return gender;
}

public void setGender (String gender)
{
    this.gender = gender;
}

@Override
public String toString()
{
    return "ClassPojo [verified = "+verified+", name = "+name+", userImage = "+userImage+", gender = "+gender+"]";
}

}

名称.java=

  public class Name {
private String last;

private String first;

public String getLast() {
    return last;
}

public void setLast(String last) {
    this.last = last;
}

@Override
public String toString() {
    return "Name [last=" + last + ", first=" + first + "]";
}

public String getFirst() {
    return first;
}

public void setFirst(String first) {
    this.first = first;
} }

结果:- 乔 六包 男性 错误的 Rm9vYmFyIQ==

【讨论】:

  • 这里的EntityClass是什么?你能把它也添加到代码中吗?
  • EntityClass是Json所有属性的getter&setter类。
  • 是的,我知道它是 PoJo 类,因为它没有发布在 OP 上,请添加它作为答案的一部分。
猜你喜欢
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2014-06-11
相关资源
最近更新 更多