2017-11-29 6 views
0

food 데이터베이스 API의 데이터 피드를 사용하여 tableview에 사용되는 Food 클래스를 작성합니다.json의 데이터가 포함 된 Food 클래스의 적절한 구조

이 클래스의 올바른 구조는 무엇입니까? 물론 영양 가치 (예 : 칼로리)가 측정 값과 함께 변경되지는 않았지만 각 영양소가 영양 값 (예 : 칼로리)에 따라 달라지는 경우 이는 당연한 것입니다.

"report": { 
    ... 
    "food": { 
     ... 
     "name": "Cheese, cheddar", 
     ... 
     "nutrients": [ 
      { 
       ... 
       "unit": "kcal", 
       ... 
       "measures": [ 
        { 
         "label": "cup, diced", 
         "eqv": 132.0, 
         "eunit": "g", 
         "qty": 1.0, 
         "value": "48.87" 
        }, 
        { 
         "label": "cup, melted", 
         "eqv": 244.0, 
         "eunit": "g", 
         "qty": 1.0, 
         "value": "90.33" 
        }, 

내 초기 아이디어는 먼저 나중에 클래스를 구조화 데이터에 액세스하는 것이 었습니다 :

json으로이 (https://api.nal.usda.gov/ndb/reports/?ndbno=01009&type=f&format=json&api_key=DEMO_KEY)과 같이 보입니다. 이것은 내가 한 것입니다 :

지금은 단지 각 영양소 값을 추출합니다. 누구든지 응용 프로그램을 구조화하는 방법에 대한 지침을 줄 수 다음 데이터를 피드 수 있습니다. 그럼 당신은 단지를 사용하여이 모델로 JSON을 디코딩 할 수

struct Measure: Codable { 
    let label: String 
    let eqv: Double 
    let unit: String 
    let qty: Int 
    let value: String 
} 

struct Nutrient: Codable { 
    let unit: String 
    let measures: [Measure] 
} 

struct Food: Codable { 
    let name: String 
    let nutrients: [Nutrient] 
} 

:

답변

0

나는 귀하의 질문에 정확히 무엇인지,하지만 JSON이 같은 다른 모델을 만들 수 있음을 구문 분석 할 것 정말로 확실하지 않다 JSONDecoder like this

try JSONDecoder().decode(Food.self, from: data) 
+0

귀하의 답변은 내가 원하는 내용이었습니다. 나는 json의 정보를 가지고 클래스의 구조를 설정하는 방법을 생각할 수 없었다. 그걸 감안할 때 위의 코드에서 보았 듯이 피라미드를 피하지 않고 json을 디코딩 할 수있는 간단한 방법이 있습니까? – vas

+0

예, 마지막 행. 모델이 코드 가능 프로토콜을 따르고 속성의 이름이 JSON의 키와 동일한 경우 JSONDecoder가 데이터를 변환 할 수 있어야합니다. – bughana

+0

이 가이드는 JSONDecoder의 작동 방식에 대해 자세히 알고 싶다면 매우 유용합니다. http://benscheirman.com/2017/06/ultimate-guide-to-json-parsing-with-swift-4/ – bughana