如何用gson反序列化这个json字符串?

时间:2015-05-06 18:53:17

标签: android json gson

我正在尝试在Android项目中反序列化此JSON字符串,但我没有任何经验。

Sunday

我试图做这样的事情,但它不起作用:

{"nodes":[{"node":{"title":"esesese", "body":"hey world whatup"}}, {"node":{"title":"Asdasd", "body":"asdefasdefe"}}]}

使用此代码:

public class Nodes {    
    public Node[] nodes;
}

public class Node {
    public String title;
    public String body;
}

2 个答案:

答案 0 :(得分:0)

您可以反序列化为

public class Nodes{
private List<Node> nodes = new ArrayList<Node>();
}

public class Node_ {
private String title;
private String body;
}

public class Node {
private Node_ node;
}

在代码中尝试:

Nodes articles = new Gson().fromJson(result, Nodes.class);

答案 1 :(得分:0)

以下作品:

public static class Nodes {
    private List<NodeWrapper> nodes;

    public List<NodeWrapper> getNodes() {
        return nodes;
    }

    public void setNodes(List<NodeWrapper> nodes) {
        this.nodes = nodes;
    }
}

public static class Node {
    private String title;
    private String body;

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle() { return title; }

    public void setBody(String body) { this.body = body; }

    public String getBody() { return body; }
}


public static class NodeWrapper {
    private Node node;

    public Node getNode() { return node; }

    public void setNode(Node node) { this.node = node; }
}

然后做

Nodes nodes = new Gson().fromJson(result, Nodes.class);

我试过这个:

    Nodes nodes = new Gson().fromJson("{\"nodes\":[{\"node\":{\"title\":\"esesese\", \"body\":\"hey world whatup\"}}, {\"node\":{\"title\":\"Asdasd\", \"body\":\"asdefasdefe\"}}]}", Nodes.class);
    System.out.println(nodes.getNodes().get(1).getNode().getBody());

它是如此迂回的原因是你看看你的JSON:

{
    "nodes": [
        {
            "node": {
                "title": "esesese",
                "body": "hey world whatup"
            }
        },
        {
            "node": {
                "title": "Asdasd",
                "body": "asdefasdefe"
            }
        }
    ]
}

然后nodes包含具有node属性的对象列表,该属性具有titlebody属性 - 它不仅仅是包含a的对象列表titlebody。因此,你需要一个包装器。