【发布时间】:2018-05-23 07:07:31
【问题描述】:
我一直在寻找如何对这样的 JSON 对象进行排序。它有很多属性,但我只是想按“名称”的字母顺序对对象进行排序:
我真的是 java 新手,所以你有任何可以开始的信息,那会很棒!
//更新:
所以我想出了如何提取每家餐厅的属性,现在我正在尝试实现一个比较器来对 json 对象进行排序,但我对如何调用比较器以及输入什么参数感到困惑
这是我正在使用的比较器(从互联网上获取的)
public class AlphabeticalComparator implements Comparator<String> {
public int compare(String obj1, String obj2) {
if (obj1 == null) {
return -1;
}
if (obj2 == null) {
return 1;
}
if (obj1.equals( obj2 )) {
return 0;
}
return obj1.compareTo(obj2);
}
}
我对如何对对象进行排序也有点困惑,因为它只会返回一个整数。我试图排序的 json 对象在下面
这是我连接到 zomato API 时收到的 JSON 对象
``
{
"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": []
}
},
【问题讨论】:
-
感谢您的关注,我已将其从问题中删除
-
像 HashMap 一样,JSON 没有键排序的概念。你不打算把这个 JSON 解析成一个 Object 吗?
标签: java android json sorting parsing