繁体   English   中英

如何从JSON字符串获取数据?

[英]How to get data from JSON string?

我有一个像这样的JSON字符串:

{
    "response":[2,
        {
            "id":"187",
            "name":"John",
            "surname":"Corner"
        },
        {
            "id":"254",
            "name":"Bob",
            "surname":"Marley"
        }
    ]
}

如何使用Java中的GSON lib解析它? 我试过了:

static class SearchRequest {
    private Names[] response;

    static class Names {
        private int id;
        private String name;
        private String surname;
    }
}

但它不起作用:(

response数组不仅包含Names ,而且还包含一个整数值: response[0]=2 所以你必须使用类似

private Object[] response;

新增:我认为,您无需更改JSON,因为您的response是私有的,因此您应该使用getter:

static class SearchRequest {
    private Object[] response;

    static class Names {
        private int id;
        private String name;
        private String surname;
    }

    public List<Names> getNames() {
        List list = new ArrayList();
        list.addAll(Arrays.asList(response));
        return (List<Names>) list.subList(1, response.length);
    }

    public int getAmount() {
        return (Integer) response[0];
    }

    public void setNames(List<Names> names) {
        response = new Object[names.size() + 1];
        response[0] = names.size();
        for (int i = 0, namesSize = names.size(); i < namesSize; i++) {
            response[i + 1] = names.get(i);
        }
    }
}

我准备了一个示例代码来测试您的情况,将gson-2.1.jar用作库并正确运行。 我通过从响应数组的开头删除"2,"来修改了JSON字符串,因为它引起了异常。 看一下并测试以下代码:

import com.google.gson.Gson;

public class Test
{
    static class SearchRequest
    {
        private Names [] response;

        static class Names
        {
            private int id;
            private String name;
            private String surname;
        }
    }

    public static void main ( String [] args )
    {
        Gson gson = new Gson();
        String str = "{ \"response\":" 
                   + "[{\"id\":\"187\",\"name\":\"John\",\"surname\":\"Corner\"},"
                   + "{\"id\":\"254\",\"name\":\"Bob\",\"surname\":\"Marley\"}]}";

        SearchRequest request = new SearchRequest();
        request = gson.fromJson( str, SearchRequest.class );
        System.out.println( "name of 1st: " + request.response [ 0 ].name );
        System.out.println( "surname of 2nd: " + request.response [ 1 ].surname );
    }
}

输出:

name of 1st: John
surname of 2nd: Marley

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM