2017-12-10 9 views
0

StringBufferを解析して文字列のリストに入れ、リストビューを使用してすべてのレストラン名を列挙しようとしていますが、StringBufferの変換に問題があります私がgetAsJsonObject()を試みるたびに、JsonObjectに変換します。 JSONオブジェクトに変換するバッファを適切に取得する方法と、JSonObjectにStringBufferをキャストできない理由を理解するのに役立ちます。 何か助けていただければ幸いです。JsonObjectを文字列のリストに変換する

String restaurantName; 
    JsonElement restaurantJSONElement; 
    JsonPrimitive restaurantJSONPrimitive; 


    JsonParser parser = new JsonParser(); 
    // buffer is the StringBuffer read 
    JsonElement parentJSONElement = parser.parse(String.valueOf(buffer)); 
    JsonObject parentJSONObject = parentJSONElement.getAsJsonObject(); 
//this is where is crashes I assume its because it cant convert the JsonElement to a JsonObject 
    JsonArray restaurantsJSONArray = (JsonArray) parentJSONObject.get("restaurants"); 
    List<String> restaurantnamelist1 = new ArrayList<String>(); 

    { 
     for (int i = 0; i < 1; i++) { 
      //get the element 
      restaurantJSONElement = ((JsonObject) restaurantsJSONArray.get(i)).get("restaurant"); 
      //get the restaurant name 
      restaurantJSONPrimitive = ((JsonObject) restaurantJSONElement.getAsJsonObject()).getAsJsonPrimitive("name"); 
      restaurantName = restaurantJSONPrimitive.getAsString(); 
      restaurantnamelist1.add(restaurantName); 
     } 
    } 

と、これはStringBufferのが含まれているものです:

{ 
    "results_found": 10573, 
    "results_start": 0, 
    "results_shown": 20, 
    "restaurants": [ 
    { 
     "restaurant": { 
     "R": { 
      "res_id": 16795271 
     }, 
     "apikey": "fa221c30c201daf8380ac435cedfebe9", 
     "id": "16795271", 
     "name": "Craigie On Main", //This is what I want to sort it by 
     "url": "https://www.zomato.com/boston/craigie-on-main-cambridge?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "location": { 
      "address": "853 Main St, Cambridge 02139", 
      "locality": "Central Square", 
      "city": "Boston", 
      "city_id": 289, 
      "latitude": "42.3634820000", 
      "longitude": "-71.0985660000", 
      "zipcode": "02139", 
      "country_id": 216, 
      "locality_verbose": "Central Square, Boston" 
     }, 
     "switch_to_order_menu": 0, 
     "cuisines": "European, French", 
     "average_cost_for_two": 275, 
     "price_range": 4, 
     "currency": "$", 
     "offers": [], 
     "thumb": "https://b.zmtcdn.com/data/res_imagery/16795271_CHAIN_bd36a0893cde3f70ab4a67f1e086d5f5.jpg?fit=around%7C200%3A200&crop=200%3A200%3B%2A%2C%2A", 
     "user_rating": { 
      "aggregate_rating": "4.2", 
      "rating_text": "Very Good", 
      "rating_color": "5BA829", 
      "votes": "342" 
     }, 
     "photos_url": "https://www.zomato.com/boston/craigie-on-main-cambridge/photos?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1#tabtop", 
     "menu_url": "https://www.zomato.com/boston/craigie-on-main-cambridge/menu?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1&openSwipeBox=menu&showMinimal=1#tabtop", 
     "featured_image": "https://b.zmtcdn.com/data/res_imagery/16795271_CHAIN_bd36a0893cde3f70ab4a67f1e086d5f5.jpg", 
     "has_online_delivery": 0, 
     "is_delivering_now": 0, 
     "deeplink": "zomato://restaurant/16795271", 
     "has_table_booking": 0, 
     "events_url": "https://www.zomato.com/boston/craigie-on-main-cambridge/events#tabtop?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "establishment_types": [] 
     } 
    }, 
    { 
     "restaurant": { 
     "R": { 
      "res_id": 16798941 
     }, 
     "apikey": "fa221c30c201daf8380ac435cedfebe9", 
     "id": "16798941", 
     "name": "O Ya", 
     "url": "https://www.zomato.com/boston/o-ya-boston?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "location": { 
      "address": "9 East St, Boston 02111", 
      "locality": "Leather District", 
      "city": "Boston", 
      "city_id": 289, 
      "latitude": "42.3513170000", 
      "longitude": "-71.0570370000", 
      "zipcode": "02111", 
      "country_id": 216, 
      "locality_verbose": "Leather District, Boston" 
     }, 
     "switch_to_order_menu": 0, 
     "cuisines": "Japanese, Sushi", 
     "average_cost_for_two": 275, 
     "price_range": 4, 
     "currency": "$", 
     "offers": [], 
     "thumb": "https://b.zmtcdn.com/data/res_imagery/16798941_CHAIN_d58be7a0f56ad4fbad498ba65b746a67.jpg?fit=around%7C200%3A200&crop=200%3A200%3B%2A%2C%2A", 
     "user_rating": { 
      "aggregate_rating": "4.3", 
      "rating_text": "Very Good", 
      "rating_color": "5BA829", 
      "votes": "192" 
     }, 
     "photos_url": "https://www.zomato.com/boston/o-ya-boston/photos?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1#tabtop", 
     "menu_url": "https://www.zomato.com/boston/o-ya-boston/menu?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1&openSwipeBox=menu&showMinimal=1#tabtop", 
     "featured_image": "https://b.zmtcdn.com/data/res_imagery/16798941_CHAIN_d58be7a0f56ad4fbad498ba65b746a67.jpg?output-format=webp", 
     "has_online_delivery": 0, 
     "is_delivering_now": 0, 
     "deeplink": "zomato://restaurant/16798941", 
     "has_table_booking": 0, 
     "events_url": "https://www.zomato.com/boston/o-ya-boston/events#tabtop?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "establishment_types": [] 
     } 
    }, 
    { 
     "restaurant": { 
     "R": { 
      "res_id": 16798079 
     }, 
     "apikey": "fa221c30c201daf8380ac435cedfebe9", 
     "id": "16798079", 
     "name": "Solea Restaurant and Tapas Bar", 
     "url": "https://www.zomato.com/boston/solea-restaurant-and-tapas-bar-waltham?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "location": { 
      "address": "388 Moody St, Waltham 02453", 
      "locality": "Waltham", 
      "city": "Boston", 
      "city_id": 289, 
      "latitude": "42.3695490000", 
      "longitude": "-71.2370130000", 
      "zipcode": "02453", 
      "country_id": 216, 
      "locality_verbose": "Waltham, Boston" 
     }, 
     "switch_to_order_menu": 0, 
     "cuisines": "Spanish, Tapas", 
     "average_cost_for_two": 275, 
     "price_range": 4, 
     "currency": "$", 
     "offers": [], 
     "thumb": "", 
     "user_rating": { 
      "aggregate_rating": "4.2", 
      "rating_text": "Very Good", 
      "rating_color": "5BA829", 
      "votes": "303" 
     }, 
     "photos_url": "https://www.zomato.com/boston/solea-restaurant-and-tapas-bar-waltham/photos?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1#tabtop", 
     "menu_url": "https://www.zomato.com/boston/solea-restaurant-and-tapas-bar-waltham/menu?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1&openSwipeBox=menu&showMinimal=1#tabtop", 
     "featured_image": "", 
     "has_online_delivery": 0, 
     "is_delivering_now": 0, 
     "deeplink": "zomato://restaurant/16798079", 
     "has_table_booking": 0, 
     "events_url": "https://www.zomato.com/boston/solea-restaurant-and-tapas-bar-waltham/events#tabtop?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "establishment_types": [] 
     } 
    }, 
"restaurant": { 
     "R": { 
      "res_id": 16796139 
     }, 
     "apikey": "fa221c30c201daf8380ac435cedfebe9", 
     "id": "16796139", 
     "name": "Harvest", 
     "url": "https://www.zomato.com/boston/harvest-cambridge?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "location": { 
      "address": "44 Brattle St, Cambridge 02138", 
      "locality": "Harvard Square", 
      "city": "Boston", 
      "city_id": 289, 
      "latitude": "42.3742680000", 
      "longitude": "-71.1219960000", 
      "zipcode": "02138", 
      "country_id": 216, 
      "locality_verbose": "Harvard Square, Boston" 
     }, 
     "switch_to_order_menu": 0, 
     "cuisines": "American, Breakfast", 
     "average_cost_for_two": 275, 
     "price_range": 4, 
     "currency": "$", 
     "offers": [], 
     "thumb": "https://b.zmtcdn.com/data/res_imagery/16796139_RESTAURANT_4f9960714d6bd153a4571dd062c4ff45.jpg?fit=around%7C200%3A200&crop=200%3A200%3B%2A%2C%2A", 
     "user_rating": { 
      "aggregate_rating": "3.9", 
      "rating_text": "Good", 
      "rating_color": "9ACD32", 
      "votes": "190" 
     }, 
     "photos_url": "https://www.zomato.com/boston/harvest-cambridge/photos?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1#tabtop", 
     "menu_url": "https://www.zomato.com/boston/harvest-cambridge/menu?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1&openSwipeBox=menu&showMinimal=1#tabtop", 
     "featured_image": "https://b.zmtcdn.com/data/res_imagery/16796139_RESTAURANT_4f9960714d6bd153a4571dd062c4ff45.jpg", 
     "has_online_delivery": 0, 
     "is_delivering_now": 0, 
     "deeplink": "zomato://restaurant/16796139", 
     "has_table_booking": 0, 
     "events_url": "https://www.zomato.com/boston/harvest-cambridge/events#tabtop?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "establishment_types": [] 
     } 
    }, 
+0

私はあなたのコードを試しましたが、それは私のためにクラッシュしていません。 JsonArray restaurantsJSONArrayが正常に読み込まれています。私はあなたのStringBufferを変更しましたが、これは有効なjson文字列ではありません。 http://json.parser.online.fr/ –

+0

のようなどんなウェブサイトでもjsonの文字列の有効性をチェックしています。nullのオブジェクト参照で仮想メソッドを呼び出そうとしています – Steve

+0

このエラーは、JsonElementsがレストランJSONElement =((JsonObject)restaurantsJSONArray.get(i))。get( "restaurant");なぜ私はnullに何も設定していないので、これを取得しているか分からない – Steve

答えて

0

あなたはrestaurantsJSONArrayにNPEを取得する場合、私はオブジェクトへのpart要素が正常に見えるようだとして、あなたが適切JsonArrayにJsonObjを変換しなかったと仮定し、

JsonArray restaurantsJSONArray = parentJSONObject.getAsJsonArray("restaurants"); 
0

そう、私は以下の文字列バッファを使用しようとすると、それが正常に動作している:

{ 
    "results_found": 10573, 
    "results_start": 0, 
    "results_shown": 20, 
    "restaurants": [ 
    { 
     "restaurant": { 
     "R": { 
      "res_id": 16795271 
     }, 
     "apikey": "fa221c30c201daf8380ac435cedfebe9", 
     "id": "16795271", 
     "name": "Craigie On Main", 
     "url": "https://www.zomato.com/boston/craigie-on-main-cambridge?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "location": { 
      "address": "853 Main St, Cambridge 02139", 
      "locality": "Central Square", 
      "city": "Boston", 
      "city_id": 289, 
      "latitude": "42.3634820000", 
      "longitude": "-71.0985660000", 
      "zipcode": "02139", 
      "country_id": 216, 
      "locality_verbose": "Central Square, Boston" 
     }, 
     "switch_to_order_menu": 0, 
     "cuisines": "European, French", 
     "average_cost_for_two": 275, 
     "price_range": 4, 
     "currency": "$", 
     "offers": [], 
     "thumb": "https://b.zmtcdn.com/data/res_imagery/16795271_CHAIN_bd36a0893cde3f70ab4a67f1e086d5f5.jpg?fit=around%7C200%3A200&crop=200%3A200%3B%2A%2C%2A", 
     "user_rating": { 
      "aggregate_rating": "4.2", 
      "rating_text": "Very Good", 
      "rating_color": "5BA829", 
      "votes": "342" 
     }, 
     "photos_url": "https://www.zomato.com/boston/craigie-on-main-cambridge/photos?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1#tabtop", 
     "menu_url": "https://www.zomato.com/boston/craigie-on-main-cambridge/menu?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1&openSwipeBox=menu&showMinimal=1#tabtop", 
     "featured_image": "https://b.zmtcdn.com/data/res_imagery/16795271_CHAIN_bd36a0893cde3f70ab4a67f1e086d5f5.jpg", 
     "has_online_delivery": 0, 
     "is_delivering_now": 0, 
     "deeplink": "zomato://restaurant/16795271", 
     "has_table_booking": 0, 
     "events_url": "https://www.zomato.com/boston/craigie-on-main-cambridge/events#tabtop?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "establishment_types": [] 
     } 
    }, 
    { 
     "restaurant": { 
     "R": { 
      "res_id": 16798941 
     }, 
     "apikey": "fa221c30c201daf8380ac435cedfebe9", 
     "id": "16798941", 
     "name": "O Ya", 
     "url": "https://www.zomato.com/boston/o-ya-boston?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "location": { 
      "address": "9 East St, Boston 02111", 
      "locality": "Leather District", 
      "city": "Boston", 
      "city_id": 289, 
      "latitude": "42.3513170000", 
      "longitude": "-71.0570370000", 
      "zipcode": "02111", 
      "country_id": 216, 
      "locality_verbose": "Leather District, Boston" 
     }, 
     "switch_to_order_menu": 0, 
     "cuisines": "Japanese, Sushi", 
     "average_cost_for_two": 275, 
     "price_range": 4, 
     "currency": "$", 
     "offers": [], 
     "thumb": "https://b.zmtcdn.com/data/res_imagery/16798941_CHAIN_d58be7a0f56ad4fbad498ba65b746a67.jpg?fit=around%7C200%3A200&crop=200%3A200%3B%2A%2C%2A", 
     "user_rating": { 
      "aggregate_rating": "4.3", 
      "rating_text": "Very Good", 
      "rating_color": "5BA829", 
      "votes": "192" 
     }, 
     "photos_url": "https://www.zomato.com/boston/o-ya-boston/photos?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1#tabtop", 
     "menu_url": "https://www.zomato.com/boston/o-ya-boston/menu?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1&openSwipeBox=menu&showMinimal=1#tabtop", 
     "featured_image": "https://b.zmtcdn.com/data/res_imagery/16798941_CHAIN_d58be7a0f56ad4fbad498ba65b746a67.jpg?output-format=webp", 
     "has_online_delivery": 0, 
     "is_delivering_now": 0, 
     "deeplink": "zomato://restaurant/16798941", 
     "has_table_booking": 0, 
     "events_url": "https://www.zomato.com/boston/o-ya-boston/events#tabtop?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", 
     "establishment_types": [] 
     } 
    }]} 
関連する問題