Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在另一个JSON对象中检索JSON对象?_Java_Json - Fatal编程技术网

Java 如何在另一个JSON对象中检索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

伙计,我是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
                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