Json:如何使用java从单个外部Json对象提取内部Json对象

Json:如何使用java从单个外部Json对象提取内部Json对象,java,android,json,gson,google-search-api,Java,Android,Json,Gson,Google Search Api,我有以下Json字符串,来自google搜索查询: {"responseData":{"results":[{"region":"IL","streetAddress":"1611 South Randall Road","titleNoFormatting":"Brunswick Zone XL Randall Road","staticMapUrl":"http:\/\/maps.google.com\/maps\/api\/staticmap?maptype=roadmap&for

我有以下Json字符串,来自google搜索查询:

{"responseData":{"results":[{"region":"IL","streetAddress":"1611 South Randall Road","titleNoFormatting":"Brunswick Zone XL Randall Road","staticMapUrl":"http:\/\/maps.google.com\/maps\/api\/staticmap?maptype=roadmap&format=gif&sensor=false&size=150x100&zoom=13&markers=42.162958,-88.334155","listingType":"local","addressLines":["1611 South Randall Road","Algonquin, IL"],"lng":"-88.334155","phoneNumbers":[{"type":"","number":"(847) 658-2257"}],"url":"http:\/\/www.google.com\/maps\/place?source=uds&q=brunswick+zone&cid=8286591317090502839","country":"United States","city":"Algonquin","content":"","GsearchResultClass":"GlocalSearch","maxAge":604800,"title":"<b>Brunswick Zone<\/b> XL Randall Road","ddUrlToHere":"http:\/\/www.google.com\/maps?source=uds&daddr=1611+South+Randall+Road,+Algonquin,+IL+(Brunswick+Zone+XL+Randall+Road)+@42.162958,-88.334155&iwstate1=dir:to","ddUrl":"http:\/\/www.google.com\/maps?source=uds&daddr=1611+South+Randall+Road,+Algonquin,+IL+(Brunswick+Zone+XL+Randall+Road)+@42.162958,-88.334155&saddr=60102","ddUrlFromHere":"http:\/\/www.google.com\/maps?source=uds&saddr=1611+South+Randall+Road,+Algonquin,+IL+(Brunswick+Zone+XL+Randall+Road)+@42.162958,-88.334155&iwstate1=dir:from","accuracy":"8","lat":"42.162958","viewportmode":"explicit"},{"region":"IL","streetAddress":"2075 East Algonquin Road","titleNoFormatting":"Brunswick Zone Algonquin","staticMapUrl":"http:\/\/maps.google.com\/maps\/api\/staticmap?maptype=roadmap&format=gif&sensor=false&size=150x100&zoom=13&markers=42.154629,-88.265871","listingType":"local","addressLines":["2075 East Algonquin Road","Algonquin, IL"],"lng":"-88.265871","phoneNumbers":[{"type":"","number":"(847) 658-9200"}],"url":"http:\/\/www.google.com\/maps\/place?source=uds&q=brunswick+zone&cid=7798335569608325784","country":"United States","city":"Algonquin","content":"","GsearchResultClass":"GlocalSearch","maxAge":604800,"title":"<b>Brunswick Zone<\/b> Algonquin","ddUrlToHere":"http:\/\/www.google.com\/maps?source=uds&daddr=2075+East+Algonquin+Road,+Algonquin,+IL+(Brunswick+Zone+Algonquin)+@42.154629,-88.265871&iwstate1=dir:to","ddUrl":"http:\/\/www.google.com\/maps?source=uds&daddr=2075+East+Algonquin+Road,+Algonquin,+IL+(Brunswick+Zone+Algonquin)+@42.154629,-88.265871&saddr=60102","ddUrlFromHere":"http:\/\/www.google.com\/maps?source=uds&saddr=2075+East+Algonquin+Road,+Algonquin,+IL+(Brunswick+Zone+Algonquin)+@42.154629,-88.265871&iwstate1=dir:from","accuracy":"8","lat":"42.154629","viewportmode":"explicit"}],"viewport":{"center":{"lng":"-88.48145","lat":"42.281384"},"sw":{"lng":"-88.74015","lat":"42.129276"},"ne":{"lng":"-88.222755","lat":"42.43349"},"span":{"lng":"0.51739","lat":"0.304211"}},"cursor":{"moreResultsUrl":"http:\/\/www.google.com\/local?oe=utf8&ie=utf8&num=4&mrt=yp,loc&sll=37.779160,-122.420090&start=0&hl=en&q=brunswick+zone+60102","currentPageIndex":0,"estimatedResultCount":"258","pages":[{"start":"0","label":1},{"start":"4","label":2},{"start":"8","label":3},{"start":"12","label":4}]}},"responseStatus":200,"responseDetails":null}
{“responseData”:{“results”:[{“region”:“IL”,“streetAddress”:“1611南兰德尔路”,“Titlenoformating”:“Brunswick Zone XL兰德尔路”,“staticMapUrl”:“http:\/\/maps.google.com\/maps\/api\/staticmap?maptype=roadmap&format=gif&sensor=false&size=150x100&zoom=13&markers=42.162958,-.334155”,“listingType”:“local”、“addressLines”:”:[“兰德尔南路1611号”、“伊利诺伊州阿尔冈昆”、“液化天然气”:“-88.334155”、“电话号码”:[{“类型”:““号码”:”(847)658-2257“}],“网址”:“http:\/\/www.google.com\/maps\/place?source=uds&q=brunswick+zone&cid=8286591317090502839”、“国家”:“美国”、“城市”:“阿尔冈昆”、“内容”:“GsearchResultClass”:“全球搜索”、“maxAge”:604800,“标题”:”布伦瑞克区XL兰德尔路“,”ddUrlToHere:“http:\/\/www.google.com\/maps?source=uds&daddr=1611+South+Randall+Road,+Algonquin,+IL+(布伦瑞克区+XL+Randall+Road)+@42.162958,-88.334155&iwstate1=dir:to”,“ddUrl:“http:\/\/www.google.com\/maps?source=uds&daddr=1611+South+randandall+Road,+Algonquin,+IL+(布伦瑞克区+XL+Randall+Road)+@42.162958,-88.334155&saddr=60102,“ddUrlFromHere”:“http:\/\/www.google.com\/maps?source=uds&saddr=1611+South+Randall+Road,+Algonquin,+IL+(布伦瑞克+Zone+XL+Randall+Road)+@42.162958,-88.334155&iwstate1=dir:from”,“准确性”:“8”,“lat”:“42.162958”,“视口模式”:“显式”;“地区”:“IL”,“街道地址”:“2075东Algonquin Road”,“titlenoformating”“:“布伦瑞克地区阿尔冈琴”,“静态地图url:“http:\/\/maps.google.com\/maps\/api\/staticmap?maptype=roadmap&format=gif&sensor=false&size=150x100&zoom=13&markers=42.154629,-88.265871”,“列表类型”:“本地”,“地址线”:[“2075东阿尔冈琴路”,“伊利诺伊州阿尔冈琴”],“液化天然气”:-88.265871”,“电话号码”:[{“类型”:“号码”:(847)658-9200”),“url”:”“http:\/\/www.google.com\/maps\/place?source=uds&q=brunswick+zone&cid=7798335569608325784”,“国家”:“美国”,“城市”:“阿尔冈昆”,“内容”:“GsearchResultClass”:“GlocalSearch”,“maxAge”:604800,“标题”:“不伦瑞克区阿尔冈昆”,“ddUrlToHere”:“http:\/\/www.google.com\/maps?source=uds&daddr=2075+East+Algonquin+Road”,“阿尔冈昆”+IL+(布伦瑞克+Zone+Algonquin)+@42.154629,-88.265871&iwstate1=dir:to”,“ddUrl:“http:\/\/www.google.com\/maps?source=uds&daddr=2075+East+Algonquin+Road,+Algonquin,+IL+(布伦瑞克+Zone+Algonquin)+@42.154629,-88.265871&saddr=60102”,“ddUrlFromHere:“http:\/\/www.google.com\/maps?source=uds&saddr=2075+East+Algonquin+Road,+Algonquin,+Algonquin,”+(布伦瑞克+Zone+Algonquin)+@42.154629,-88.265871&iwstate1=dir:from”,“accurity:“8”,“lat:”42.154629”,“viewportmode:”explicit“}],“viewport:”{“center:”{“lng:”--88.48145,“lat:”42.281384“}”,sw:{“lng:”--88.74015”,“lat:”42.129276“}”,ne:{“lng:”--88.222755”,“lat:”42.43349“,”span:”lng:”lat 0.51739“,”光标“}http:\/\/www.google.com\/local?oe=utf8&ie=utf8&num=4&mrt=yp,loc&sll=37.779160,-122.420090&start=0&hl=en&q=brunswick+zone+60102,“currentPageIndex”:0,“estimatedResultCount”:“258”,“pages”:[{“start”:“0”,“label”:1},{“start”:“4”,“label”:2},{“start”:“8”,“label”:3},{“start”:“12”,“label”:4},},“ResponsedTails”:200}”
最外层(单个)标签为“responseData” 第一个(也是单个)嵌套标签是“结果” 在“results”对象中,我有两个相同的netsed数据集,每个数据集表示一个完整的google搜索结果,其中包含我需要的元素,例如: “标题信息”、“地址行”和“电话号码”

我正在编写我的第一个Android java应用程序,并且正在努力提取我需要的值。我已经研究了Gson和Jackson,但是,我无法为自己想出一个解决方案。我认为,部分问题可能与一个事实有关,这些内部数据集没有显式的容器名称,它们只有相同的结构:outer标签“结果”只出现一次,并且包含两个相同的数据集。
任何人都可以提供一个如何处理这个问题的例子吗?

在Gson中,JSON中的
{}
可以映射到
Map
或一个完整的Javabean。JSON中的
[]
可以映射到
列表
对象[]

根据您当前的结构和Google Gson,我建议如下:

public class GoogleResults {
    private ResponseData responseData; 
    // Add/generate getter+setter.

    static class ResponseData {
        private List<Result> results;
        // Add/generate getter+setter.
    }

    static class Result {
        private String titleNoFormatting;
        private List<String> addressLines;
        private List<Map<String, String>> phoneNumbers; // Or List<PhoneNumber>
        // Add/generate getters+setters.
    }
}

在Gson中,JSON中的
{}
可以映射到
Map
或完整的Javabean。JSON中的
[]
可以映射到
列表
对象[]

根据您当前的结构和Google Gson,我建议如下:

public class GoogleResults {
    private ResponseData responseData; 
    // Add/generate getter+setter.

    static class ResponseData {
        private List<Result> results;
        // Add/generate getter+setter.
    }

    static class Result {
        private String titleNoFormatting;
        private List<String> addressLines;
        private List<Map<String, String>> phoneNumbers; // Or List<PhoneNumber>
        // Add/generate getters+setters.
    }
}
您可以使用Android从JSON字符串创建JSON对象表示

乙二醇

现在,您可以通过
length()

迭代
结果,您可以使用Android从JSON字符串创建JSON对象表示

乙二醇

现在,您可以通过
length()
结果进行迭代

JSONObject json = new JSONObject("..."); //Where the string value is the JSON from your question.
JSONArray results = json.getJSONObject("responseData").getJSONArray("results);