Retrofit을 사용하여 JSON 데이터를 구문 분석하고 싶습니다. 그런데 제가 예시로 든 JSON 구조에는 객체와 그 객체 안에 배열이 있습니다. 이에 대한 유사한 예제 구조를 찾을 수 없습니다. 그래서 그런 질문을 하고 싶었다. 나는 그것이 모두에게 유용하기를 바랍니다.
모든 데이터를 구문 분석/가져오는 방법
{
"MyData": [
{
"food_id": "1",
"food_name": "Food 1",
"food_image": "imageurl",
"food_kcal": "32",
"food_url": "url",
"food_description": "desc",
"carb_percent": "72",
"protein_percent": "23",
"fat_percent": "4",
"units": [
{
"unit": "Unit A",
"amount": "735.00",
"calory": "75.757",
"calcium": "8.580",
"carbohydrt": "63.363",
"cholestrl": "63.0",
"fiber_td": "56.12",
"iron": "13.0474",
"lipid_tot": "13.01",
"potassium": "11.852",
"protein": "717.1925",
"sodium": "112.02",
"vit_a_iu": "110.7692",
"vit_c": "110.744"
},
{
"unit": "Unit C",
"amount": "32.00",
"calory": "23.757",
"calcium": "53.580",
"carbohydrt": "39.363",
"cholestrl": "39.0",
"fiber_td": "93.12",
"iron": "93.0474",
"lipid_tot": "93.01",
"potassium": "9.852",
"protein": "72.1925",
"sodium": "10.0882",
"vit_a_iu": "80.7692",
"vit_c": "80.744"
}
]
},
{
"food_id": "2",
"food_name": "Food 2",
"food_image": "imageurl",
"food_kcal": "50",
"food_url": "url",
"food_description": "desc",
"carb_percent": "25",
"protein_percent": "14",
"fat_percent": "8",
"units": [
{
"unit": "Unit A",
"amount": "25.00",
"calory": "25.757",
"calcium": "55.580",
"carbohydrt": "53.363",
"cholestrl": "53.0",
"fiber_td": "53.12",
"iron": "53.0474",
"lipid_tot": "53.01",
"potassium": "17.852",
"protein": "757.1925",
"sodium": "122.02",
"vit_a_iu": "10.7692",
"vit_c": "10.744"
},
{
"unit": "Unit C",
"amount": "2.00",
"calory": "2.757",
"calcium": "5.580",
"carbohydrt": "3.363",
"cholestrl": "3.0",
"fiber_td": "3.12",
"iron": "3.0474",
"lipid_tot": "3.01",
"potassium": "77.852",
"protein": "77.1925",
"sodium": "12.02",
"vit_a_iu": "0.7692",
"vit_c": "0.744"
},
{
"unit": "Unit G",
"amount": "1.00",
"calory": "2.1",
"calcium": "0.580",
"carbohydrt": "0.363",
"cholestrl": "0.0",
"fiber_td": "0.12",
"iron": "0.0474",
"lipid_tot": "0.01",
"potassium": "5.852",
"protein": "0.1925",
"sodium": "1.02",
"vit_a_iu": "0.7692",
"vit_c": "0.744"
}
]
}
]
}
마이데이터 클래스
public class MyData {
@SerializedName("MyData")
@Expose
private List<Foods> myData= null;
public List<Foods> getMyData() {
return myData;
}
public void setMyData(List<Foods> myData) {
this.myData= myData;
}
}
음식 수업
public class Foods {
@SerializedName("food_id")
@Expose
private String foodId;
@SerializedName("food_name")
@Expose
private String foodName;
@SerializedName("food_image")
@Expose
private String foodImage;
@SerializedName("food_kcal")
@Expose
private String foodKcal;
@SerializedName("food_url")
@Expose
private String foodUrl;
@SerializedName("food_description")
@Expose
private String foodDescription;
@SerializedName("carb_percent")
@Expose
private String carbPercent;
@SerializedName("protein_percent")
@Expose
private String proteinPercent;
@SerializedName("fat_percent")
@Expose
private String fatPercent;
@SerializedName("units")
@Expose
private List<FoodUnitsData> units= null;
//getters and setters
}
FoodUnitData 클래스
public class FoodUnitsData {
@SerializedName("unit")
@Expose
private String unit;
@SerializedName("amount")
@Expose
private String amount;
@SerializedName("calory")
@Expose
private String calory;
@SerializedName("calcium")
@Expose
private String calcium;
@SerializedName("carbohydrt")
@Expose
private String carbohydrt;
@SerializedName("cholestrl")
@Expose
private String cholestrl;
@SerializedName("fiber_td")
@Expose
private String fiberTd;
@SerializedName("iron")
@Expose
private String iron;
@SerializedName("lipid_tot")
@Expose
private String lipidTot;
@SerializedName("potassium")
@Expose
private String potassium;
@SerializedName("protein")
@Expose
private String protein;
@SerializedName("sodium")
@Expose
private String sodium;
@SerializedName("vit_a_iu")
@Expose
private String vitAIu;
@SerializedName("vit_c")
@Expose
private String vitC;
//getters and setters
}
FoodAPI 인터페이스
public interface FoodAPI {
String FOOD_DATA_URL= "https://raw.githubusercontent.com/theoyuncu8/data/gh-pages/";
@Headers("Content-Type: application/json")
@GET("FoodLIST.json")
Call<MyData> getAllData();
}
MainActivity(여기에 문제가 있음)
public void getRetrofit() {
Retrofit retrofit= new Retrofit.Builder()
.baseUrl(FoodAPI.FOOD_DATA_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
FoodAPI foodAPI= retrofit.create(FoodAPI.class);
Call<MyData> call= foodAPI.getAllData();
call.enqueue(new Callback<MyData>() {
@Override
public void onResponse(@NonNull Call<MyData> call, @NonNull Response<MyData> response) {
Log.d("TAG_JSON_FOOD_DB", "--------: " + response.message());
List<Foods> foods=response.body().getMyData();
///How can I get all data
for (int i=0; i<foods.size(); i++){
Log.d("TAG_JSON_FOOD_DB", "--------: ");
}
for (int j=0; j<foods.size(); j++){
Log.d("TAG_JSON_FOOD_DB", "--------: " +);
}
}
@Override
public void onFailure(@NonNull Call<MyData> call, @NonNull Throwable t) {
}
});
}
@MayurGajra 예를 들어 1.Food(food_id=1) >2.Units(unit_name: C) 배열의 값을 값(Unit, amount, calory, vit_c) 안의 값으로 가져오고 싶습니다.
test7212022-01-09 12:41:41이 데이터는 나중에 데이터베이스에 저장하겠습니다. 그래서 각 음식에 대한 배열을 만들고 싶습니다. 1. 음식을 요청할 때 음식의 정보와 개체를 단위로 검색하고 싶습니다. 사용자가 '파스타' 음식을 선택하면 단위를 정렬합니다. 첫 번째 단위: 1접시, 기타 단위: 100그램, 기타 단위: 1그릇.. 이렇게 그가 선택한 음식의 정보와 값, 그리고 그가 선택한 단위 값을 가져옵니다.
test7212022-01-09 12:45:35제가 알아도 될까요? Retrofit 기반 도구를 어떻게 구축할 수 있었습니까? Gson, Retrofit 및 Android 자체와 관련이 없는 Java 기본 사항임에도 불구하고 가져온 데이터를 처리하는 방법을 모릅니다.
fluffy2022-01-09 12:53:03- 답변 # 1
게터를 사용하면 아마도 작동할 것입니다.
foodName을 얻으려면 "for" 루프에서 다음을 입력하면 됩니다.
list.get(i).getFoodName; //getFoodName is your getter in Foods.java class
또한 첫 번째 "단위"에 액세스하려는 경우:
//getUnits is your getter in Foods class //getUnit is your getter in FoodUnitData class list.get(i).getUnits.get(0).getUnit;
어떻게 모든 데이터를 얻을 수 있습니까?의 의미를 자세히 설명해 주시겠습니까? code에서 MyData의 전체 항목 목록을 얻는 것처럼 보이기 때문입니다.
Mayur Gajra2022-01-09 12:09:49