使用GSON的简单Json到Java转换

伊凡(IvanR):

我最近开始使用GSON库对来自Web服务的JSON进行反序列化,但是我无法使其工作。我决定在一些简单的输入上测试GSON-无法使其更简单,并且仍然无法正常工作。我研究过类似的问题,例如将JSON转换为Java,所有这些都提出了类似的解决方案。我的猜测是我遗漏了一些非常简单和明显的内容,因此对代码的全新了解可能会有所帮助。所以这是我所拥有的:

JSON格式

{"A":{"name":"qwrety","value1":1,"value2":2}}

Java类

import com.google.gson.Gson;

public class Main {

    public static void main(String[] args) {        
        String json = /*getting JSON from server*/       
        Gson gson = new Gson();
        A obj = gson.fromJson(json, A.class);
        System.out.println(obj);
    }
}

class A {
    private String name;
    private int value1;
    private int value2;

    public String getName() { return name; }
    public int getValue1() { return value1; }
    public int getValue2() { return value2; }

    public void setName(String name) { this.name = name; }
    public void setValue1(int value1) { this.value1 = value1; }
    public void setValue2(int value2) { this.value2 = value2; }

    public String toString() {
        return String.format("name: %s, value1: %d, value2: %d", name, value1, value2);
    }
}

我得到的回报是

name: null, value1: 0, value2: 0

任何人都可以说出这段代码有什么问题吗?

UPD正如@torbinsky和@ Kevin-Dolan指出的那样,问题是因为Java类结构与Json格式不匹配。为了解决这个问题,我添加了一个新类

class Container {
    private A a;

    public A getA() { return a; }

    public void setA(A a) { this.a = a; }

}

并将反序列化调用更改为

Gson gson = new Gson();
Container obj = gson.fromJson(json, Container.class);

System.out.println(obj.getA());

但是无论如何我都会打印出“ null”

托尔宾斯基:

我认为您的问题是您的JSON字符串。

尝试更改:

{"A":{"name":"qwrety","value1":1,"value2":2}}

至:

{"name":"qwrety","value1":1,"value2":2}

编辑:我认为问题可能是您的JSON字符串具有“ A”,并且区分大小写。尝试将您的成员变量更改为大写的“ A”。抱歉,我目前无法测试以确认这一点。

如果JSON格式是固定的,请尝试将您的类更改为类似的内容:

class Foo {
private String name;
private int value1;
private int value2;

public String getName() { return name; }
public int getValue1() { return value1; }
public int getValue2() { return value2; }

public void setName(String name) { this.name = name; }
public void setValue1(int value1) { this.value1 = value1; }
public void setValue2(int value2) { this.value2 = value2; }

public String toString() {
    return String.format("name: %s, value1: %d, value2: %d", name, value1, value2);
}
}

和:

class Container {
private Foo A;

public Foo getA() { return A; }

public void setA(Foo A) { this.A = A; }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章