Java 如何在另一个JSON对象中检索JSON对象?
伙计,我是android的初学者。我的问题是如何获取对象内部的json对象。例如,如我从google places api获得的下面的JSON数据所示,如何获取Java 如何在另一个JSON对象中检索JSON对象?,java,json,Java,Json,伙计,我是android的初学者。我的问题是如何获取对象内部的json对象。例如,如我从google places api获得的下面的JSON数据所示,如何获取open\u now对象,该对象位于opening\u hours内 "opening_hours" : { "open_now" : true, "weekday_text" : [] } 下面是我的java代码: // Check for all possible status
open\u now
对象,该对象位于opening\u hours
内
"opening_hours" : {
"open_now" : true,
"weekday_text" : []
}
下面是我的java代码:
// Check for all possible status
if(status.equals("OK")){
// Successfully got places details
if (nearPlaces.results != null) {
// loop through each place
for (Place p : nearPlaces.results) {
HashMap<String, String> map = new HashMap<String, String>();
double rate=p.rating;
boolean ostatus=p.open_now;
String rvalue = String.valueOf(rate);
//Log.d("Rating",rvalue );
double latitude = p.geometry.location.lat;
double longitude = p.geometry.location.lng;
Location selected_location=new Location("locationA");
selected_location.setLatitude(userlat);
selected_location.setLongitude(userlng);
Location near_locations=new Location("locationA");
near_locations.setLatitude(latitude);
near_locations.setLongitude(longitude);
double distance=selected_location.distanceTo(near_locations);
double dvalue=(Math.round(distance));
String dsvalue = String.valueOf(dvalue);
// Log.d("distance", dvalue);
// Place reference won't display in listview - it will be hidden
// Place reference is used to get "place full details"
map.put(KEY_REFERENCE, p.reference);
// Place name
map.put(KEY_NAME, p.name);
map.put(KEY_EXTRA,rvalue);
int price= p.price_level;
String pc = String.valueOf(price);
String plevel="Inexpensive";
if(pc.equals("0")){
plevel= "Inexpensive";
}
else if(pc.equals("1")){
plevel= "Inexpensive";
}
else if(pc.equals("2")){
plevel= "Moderate";
}
else if(pc.equals("3")){
plevel= "Expensive";
}
else if(pc.equals("4")){
plevel= "Very Expensive";
}
map.put(KEY_PLEVEL,plevel);
String add=p.vicinity;
map.put(KEY_ADD, add);
System.out.println("open status"+String.valueOf(ostatus));
// Log.d("Status",ostatus);
String tstat;
if(ostatus==false){
tstat="Open";
}
else{
tstat="Open";
}
map.put(KEY_STAT, tstat);
// Log.d("price level",price);
map.put(KEY_DISTANCE, dsvalue+" M");
placesListItems.add(map);
}
//检查所有可能的状态
如果(状态等于(“正常”)){
//已成功获取位置详细信息
if(nearPlaces.results!=null){
//环游每个地方
对于(位置p:nearPlaces.results){
HashMap=newHashMap();
双费率=p级;
布尔值ostatus=p.open\u now;
String rvalue=String.valueOf(rate);
//Log.d(“额定值”,右值);
双纬度=p.geometry.location.lat;
双经度=p.geometry.location.lng;
所选位置\位置=新位置(“位置A”);
所选位置。设置纬度(userlat);
所选位置。设置经度(userlng);
靠近_位置的位置=新位置(“位置A”);
近_位置。设置纬度(纬度);
近_位置。设置经度(经度);
双距离=所选位置。距离到(靠近位置);
双D值=(数学圆(距离));
String dsvalue=String.valueOf(dvalue);
//Log.d(“距离”,d值);
//位置引用不会显示在listview中-它将被隐藏
//地点参考用于获取“地点完整详细信息”
地图放置(键参考,p参考);
//地名
地图放置(图例名称,p.NAME);
map.put(额外键,右值);
国际价格=价格水平;
字符串pc=String.valueOf(价格);
字符串plevel=“便宜”;
如果(pc.equals(“0”)){
plevel=“便宜”;
}
否则,如果(pc.equals(“1”)){
plevel=“便宜”;
}
否则,如果(pc.equals(“2”)){
plevel=“中等”;
}
否则,如果(pc.equals(“3”)){
plevel=“昂贵”;
}
否则,如果(pc.equals(“4”)){
plevel=“非常昂贵”;
}
地图放置(键为PLEVEL,PLEVEL);
字符串加法=p;
地图放置(按键添加,添加);
System.out.println(“打开状态”+字符串.valueOf(ostatus));
//日志d(“状态”,ostatus);
字符串tstat;
如果(ostatus==false){
tstat=“打开”;
}
否则{
tstat=“打开”;
}
地图放置(按键统计,tstat);
//Log.d(“价格水平”,价格);
地图放置(按键距离,dsvalue+“M”);
placesListItems.add(地图);
}
您应该使用JSONObject:
JSONObject json = new JSONObject(data);
try{
JSONObject openingHours = json.getJSONObject("opening_hours");
boolean openNow = openingHours.getBoolean("open_now");
}catch(JSONException e){
e.printStackTrace();
}
您可以阅读更多关于JSONObject的信息。您的
JSONObject
中有一个数组
,而不是JSONObject
,您的模型应该是这样的:
Class Item {
ArrayList<String> weekday_text;
boolean open_now;
}
请提供到目前为止您拥有的代码。请阅读:到目前为止您尝试了什么?我们不是来给您做家庭作业的:如果找不到解决方案,您必须自己尝试并到这里来。您可能想看看JSON解析库,如GSON或Jackson2。GSON可能更容易实现。这将对您有很大帮助。这不是问题这是我的家庭作业。这是我项目的一部分,我解码了整个JSON文件,我只对这种类型的对象感兴趣。其他对象是数组和简单的JSON对象。但这是对象中的JSON对象,到目前为止我没有找到任何解决方案。这就是为什么我问它。“如何在开放时间内立即打开对象?”:open_now不是一个对象-它是一个键/值对的键。此外,这个问题没有特定于Android的。答案非常糟糕。首先,JSONArray有语法[{}]第二,你的答案有什么帮助?他的问题是错误的。他说他想在另一个JSONObject中检索JSONObject,但在他的JSON中,没有任何内部JSONObject。他只想解析JSONObject中的数组和布尔值。好吧,你修改了答案,现在更清楚了。你仍然可以举一个f如何解决。您可以使用Gson和您提供的答案。@Carnal:JSON数组不必有语法[{}]-它只需要是一个逗号分隔的JSON值列表,以[]@Squonk:为界,这样您就可以跳过括号了?
...
// reader contains your json String that comes from server
Gson gson = new GsonBuilder().create();
Item item = gson.fromJson(reader, Item.class);
// now use your item object