【问题标题】:How to pull specific object from Json String如何从 Json String 中提取特定对象
【发布时间】:2017-07-05 18:38:45
【问题描述】:

我是 Json 解析问题的新手,我有下面的 Json 对象,我需要从下面的 Json 中获取 User 对象

{
  "aud": "RoomyClinetApps",
  "sub": "AAAA",
  "User": {
    "firtsName": "Godavarthi",
    "LastName": "chaitanya"
  },
  "iss": "Roomy",
  "iat": 1499279510
}

下面是我试图拉出用户对象的代码,当我尝试打印时,上面的 json 在 jsonInString 变量中我得到了 null

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            User user= mapper.readValue(jsonInString.toString(), User.class);

 System.out.println(user.getFirtsName()); --> Null 


public class User {
    @JsonProperty
    private String firtsName;
    @JsonProperty
    private String LastName;
}

请有人给我一个更有效的工作代码。

谢谢 柴坦尼亚

【问题讨论】:

  • User 不在该 JSON 的根目录中。
  • 指定您收到的错误消息。看起来mapper.readValue(jsonInString.toString(), User.class) 将返回异常,因为整个 JSON 无法转换为 User
  • @Manindar 他们提到他们没有收到错误。该属性仅包含null。他们将FAIL_ON_UNKNOWN_PROPERTIES 设置为false
  • 嗨@Manindar,当我尝试打印 user.getFirtsName() 时,我得到的是空值,我没有遇到任何异常

标签: java json


【解决方案1】:

测试了下面的代码。它对我有用。试试这个。

public class Test {

    public static void main(String[] args) throws IOException {
        String jsonInString = "{\n"
                + "  \"aud\": \"RoomyClinetApps\",\n"
                + "  \"sub\": \"AAAA\",\n"
                + "  \"user\": {\n"
                + "    \"firtsName\": \"Godavarthi\",\n"
                + "    \"LastName\": \"chaitanya\"\n"
                + "  },\n"
                + "  \"iss\": \"Roomy\",\n"
                + "  \"iat\": 1499279510\n"
                + "}";
        ObjectMapper mapper = new ObjectMapper().configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        JsonObject jobj = mapper.readValue(jsonInString.toString(), JsonObject.class);

        System.out.println(jobj.getUser().getFirtsName());
    }

}

class User {

    private String firtsName;
    private String LastName;

    public String getFirtsName() {
        return firtsName;
    }

    public void setFirtsName(String firtsName) {
        this.firtsName = firtsName;
    }

    public String getLastName() {
        return LastName;
    }

    public void setLastName(String LastName) {
        this.LastName = LastName;
    }

}

class JsonObject {

    private String aud;
    private String sub;
    private User user;
    private String iss;
    private long iat;

    public String getAud() {
        return aud;
    }

    public void setAud(String aud) {
        this.aud = aud;
    }

    public String getSub() {
        return sub;
    }

    public void setSub(String sub) {
        this.sub = sub;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getIss() {
        return iss;
    }

    public void setIss(String iss) {
        this.iss = iss;
    }

    public long getIat() {
        return iat;
    }

    public void setIat(long iat) {
        this.iat = iat;
    }

}

希望这有帮助。

【讨论】:

  • 嗨@Manindar,您共享的代码工作正常,但我正在从 JWT 解密令牌中接收 Json 字符串,如下所示,所以当我在我的字符串上应用相同的 ode 时,它​​失败了“线程中的异常” main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 无法识别的字段 "User" 我的 json 字符串是 {"aud":"RoomyClinetApps","sub":"AAAA","User":{"firtsName": "Godavarthi","LastName":"chaitanya"},"iss":"Roomy","iat":1499312212}
  • JsonObject 类中将 User 类引用变量名称从 user 更新为 User。它会为你工作。如果有效,请接受答案。
  • 谢谢兄弟它的工作它的情况下你救了我我改变了它的工作
【解决方案2】:
public class User {
    @JsonProperty
    private String firtsName;
    @JsonProperty
    private String LastName;
}

public class JsonObject{
public string aud;
public String sub;
public User user;
public String iss;
public long iat;

}

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            JsonObject user= mapper.readValue(jsonInString.toString(), JsonObject.class);

【讨论】:

  • 我在 com.Roomy.JwtKey.main(JwtKey.java:50) 的线程“main”java.lang.NullPointerException 中遇到异常
猜你喜欢
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
相关资源
最近更新 更多