这是我下面的代码,我需要从中解析出JSONObject
单独的项目。这是我第一次使用JSON。因此,不确定如何解析JSONObject
以从中获取单个项JSONObject
。
try {
String url = service + version + method + ipAddress + format;
StringBuilder builder = new StringBuilder();
httpclient = new DefaultHttpClient();
httpget = new HttpGet(url);
httpget.getRequestLine();
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = entity.getContent();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
for (String line = null; (line = bufferedReader.readLine()) != null;) {
builder.append(line).append("\n");
}
JSONObject jsonObject = new JSONObject(builder.toString());
// Now iterate jsonObject to get Latitude,Longitude,City,Country etc etc.
}
} catch (Exception e) {
getLogger().log(LogLevel.ERROR, e.getMessage());
} finally {
bufferedReader.close();
httpclient.getConnectionManager().shutdown();
}
我的JSON看起来像这样:
{
"ipinfo": {
"ip_address": "131.208.128.15",
"ip_type": "Mapped",
"Location": {
"continent": "north america",
"latitude": 30.1,
"longitude": -81.714,
"CountryData": {
"country": "united states",
"country_code": "us"
},
"region": "southeast",
"StateData": {
"state": "florida",
"state_code": "fl"
},
"CityData": {
"city": "fleming island",
"postal_code": "32003",
"time_zone": -5
}
}
}
}
我需要latitude
,longitude
,city
,state
,country
,postal_code
从上述目的。谁能提供任何建议如何有效地做到这一点?
您可以尝试这样做,它将在json对象中递归地找到所有键值,并构造为map。您只需从Map中获取所需的键即可。
public static Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{
Iterator<String> keys = json.keys();
while(keys.hasNext()){
String key = keys.next();
String val = null;
try{
JSONObject value = json.getJSONObject(key);
parse(value,out);
}catch(Exception e){
val = json.getString(key);
}
if(val != null){
out.put(key,val);
}
}
return out;
}
public static void main(String[] args) throws JSONException {
String json = "{'ipinfo': {'ip_address': '131.208.128.15','ip_type': 'Mapped','Location': {'continent': 'north america','latitude': 30.1,'longitude': -81.714,'CountryData': {'country': 'united states','country_code': 'us'},'region': 'southeast','StateData': {'state': 'florida','state_code': 'fl'},'CityData': {'city': 'fleming island','postal_code': '32003','time_zone': -5}}}}";
JSONObject object = new JSONObject(json);
JSONObject info = object.getJSONObject("ipinfo");
Map<String,String> out = new HashMap<String, String>();
parse(info,out);
String latitude = out.get("latitude");
String longitude = out.get("longitude");
String city = out.get("city");
String state = out.get("state");
String country = out.get("country");
String postal = out.get("postal_code");
System.out.println("Latitude : " + latitude + " LongiTude : " + longitude + " City : "+city + " State : "+ state + " Country : "+country+" postal "+postal);
System.out.println("ALL VALUE " + out);
}
输出:
Latitude : 30.1 LongiTude : -81.714 City : fleming island State : florida Country : united states postal 32003
ALL VALUE {region=southeast, ip_type=Mapped, state_code=fl, state=florida, country_code=us, city=fleming island, country=united states, time_zone=-5, ip_address=131.208.128.15, postal_code=32003, continent=north america, longitude=-81.714, latitude=30.1}
我有一个json blob,如下所示: 这只是一个在这里发布的例子。在这个例子中,我们看到它提供了一个学校每年发生的所有事件的列表,该列表是一个累积列表,即上一年的事件也会被追加。我们知道的是,每年的活动都将以“会议开始”活动开始。我想通过这件事,以最新的一系列事件结束。请忽略事件名称中的时间戳或年份,它们只是示例,我在现实世界中没有此类信息。我需要的最终结果是: 所以,我想保留从“会话开始”事件
所以我可以从第一个JSOObject中获得所有元素,但我需要其他的,我已经尝试了更多的解决方案,但它们对我不起作用...
在我的Kafka Streams应用程序中,我有一个任务来设置一个预定的(按墙时间)标点符号。标点符号遍历商店的条目并对它们做一些事情。像这样: 由于我在这里使用单个存储(可能是分区的),我假设标点符号的每一次执行都绑定到该存储的单个分区。 有可能找出标点器在哪个分区上运行吗?用于声明此方法在标点符号中返回。 我读过《Kafka流:标点与过程》及其答案。我可以理解,一般来说,任务与特定分区无关。但
我们计划在网站上展示我们youtube频道的视频列表。我已经检查了V3 API,它运行良好。我遵循这个问题上指定的解决方案。 问题在于如何浏览这些年上传的视频列表。API将在单个请求中返回最多50个项目。我想给用户一个“加载更多”链接,这样他们就可以请求下一批(比如下50个)视频,按照上传日期的降序排列(最新的第一个)。在API调用允许的参数列表中,我找不到任何参数,如页码或跳过。
我想在HashMap中搜索重复项。目前这是我的HashMap:
问题内容: 我在http://json.org/javadoc/org/json/JSONObject.html上使用Java类。 以下是我的代码段。 getJSON返回以下字符串 现在…我如何获得“口号”的价值? 我尝试了页面上列出的所有方法,但没有一个起作用。 问题答案: