【问题标题】:Out of START_ARRAY token while reading a JSON in servlet在 servlet 中读取 JSON 时超出 START_ARRAY 令牌
【发布时间】:2019-10-15 05:09:10
【问题描述】:

我必须从 servlet 中收到的 JSON 字符串创建 Java 对象 下面是 JSON

[{"name":"name","value":"Shital"},{"name":"email","value":"swankhade@gmail.com"},{"name":"contactno","value":"9920042776"},{"name":"Address","value":"a6 102 Elementa"}]

我试图通过将 [ 替换为 { 和 ] 替换为 } 来更改 JSON,但它给出了一些其他错误。 我遇到异常的杰克逊代码是

// 2. initiate jackson mapper
                ObjectMapper mapper = new ObjectMapper();
// 3. Convert received JSON to Article
                Enrole enrole = mapper.readValue(json, Enrole.class);

Enroll 类是带有 setter 和 getter 的简单 bean 类

public class Enrole {
    private String name;
    private String email;
    private long contactno;
    private String address;

【问题讨论】:

标签: java jackson


【解决方案1】:

这是一种方式

try {
            ObjectMapper mapper = new ObjectMapper();
            String json = "[{\"name\":\"name\",\"value\":\"Shital\"},{\"name\":\"email\",\"value\":\"swankhade@gmail.com\"},{\"name\":\"contactno\",\"value\":\"9920042776\"},{\"name\":\"Address\",\"value\":\"a6 102 Elementa\"}]";
            KeyValue[] jsonObjArr = mapper.readValue(json, KeyValue[].class);
            Enrole enrol = new Enrole();
            for (int i = 0; i < jsonObjArr.length; i++) {

                KeyValue keyVal = jsonObjArr[i];
                if ("name".equals(keyVal.getName())) {
                    enrol.setName(keyVal.getValue());
                }
                if ("email".equals(keyVal.getName())) {
                    enrol.setEmail(keyVal.getValue());
                }
                if ("contactno".equals(keyVal.getName())) {
                    enrol.setContactno(Long.parseLong(keyVal.getValue()));
                }
                if ("address".equals(keyVal.getName())) {
                    enrol.setAddress(keyVal.getValue());
                }
            }
            System.out.println(enrol.getName());
            System.out.println(enrol.getContactno());
            System.out.println(enrol.getAddress());
            System.out.println(enrol.getEmail());
        } catch (Exception e) {
            System.out.println("Exception " + e);
        }

具有键和值的类:

class KeyValue {
    private String name;
    private String value;

    public String getName() {
        return name;
    }

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

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

模型类

class Enrole {
    private String name;
    private String email;
    private long contactno;
    private String address;

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public long getContactno() {
        return contactno;
    }

    public void setContactno(long contactno) {
        this.contactno = contactno;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-16
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多