2017-11-09 11 views
0

Json 객체 및 배열을 사용하는 데있어 처음 사용하기 때문에 용어 사용에 대해 사과하고 싶습니다.API에서 얻은 JSON 형식의 데이터 추출 (Java)

Json 개체에서 데이터를 추출 할 수있는 다양한 예제를 검색했지만 현재 상황과 유사하지 않습니다. "Plan A (경제 계획)", "Plan B 다음 JSON에서 (디럭스 플랜) "및"계획 C (라마단) "

{ 
"status": "success", 
"data": { 
    "1:Plan A (Economy Plan)": [{ 
     "idscheme": "49", 
     "plan_name": "1", 
     "plan_id": "ABS-772", 
     "term": "8", 
     "payment": "1000", 
     "amount": "8000", 
     "expected_amount": null, 
     "added_by": "2", 
     "updated_on": "2017-09-27" 
    }, { 
     "idscheme": "50", 
     "plan_name": "1", 
     "plan_id": "ABS-773", 
     "term": "8", 
     "payment": "2000", 
     "amount": "16000", 
     "expected_amount": null, 
     "added_by": "1", 
     "updated_on": "2017-09-28" 
    }, { 
     "idscheme": "48", 
     "plan_name": "1", 
     "plan_id": "ABS-762", 
     "term": "7", 
     "payment": "4000", 
     "amount": "28000", 
     "expected_amount": null, 
     "added_by": "1", 
     "updated_on": "2017-09-28" 
    }], 
    "2:Plan B (Deluxe Plan)": [{ 
     "idscheme": "33", 
     "plan_name": "2", 
     "plan_id": "ABS-486", 
     "term": "8", 
     "payment": "2000", 
     "amount": "16000", 
     "expected_amount": null, 
     "added_by": "2", 
     "updated_on": "2017-09-27" 
    }, { 
     "idscheme": "47", 
     "plan_name": "2", 
     "plan_id": "ABS-831", 
     "term": "7", 
     "payment": "3000", 
     "amount": "21000", 
     "expected_amount": null, 
     "added_by": "2", 
     "updated_on": "2017-09-27" 
    }, { 
     "idscheme": "46", 
     "plan_name": "2", 
     "plan_id": "ABS-776", 
     "term": "7", 
     "payment": "4000", 
     "amount": "28000", 
     "expected_amount": null, 
     "added_by": "2", 
     "updated_on": "2017-09-27" 
    }], 
    "5:Plan C (Ramadan)": [{ 
     "idscheme": "51", 
     "plan_name": "5", 
     "plan_id": "ABS-865", 
     "term": "7", 
     "payment": "3000", 
     "amount": "21000", 
     "expected_amount": null, 
     "added_by": "42", 
     "updated_on": "2017-10-15" 
    }, { 
     "idscheme": "52", 
     "plan_name": "5", 
     "plan_id": "ABS-389", 
     "term": "8", 
     "payment": "4000", 
     "amount": "32000", 
     "expected_amount": null, 
     "added_by": "42", 
     "updated_on": "2017-10-15" 
    }, { 
     "idscheme": "53", 
     "plan_name": "5", 
     "plan_id": "ABS-451", 
     "term": "8", 
     "payment": "5000", 
     "amount": "40000", 
     "expected_amount": null, 
     "added_by": "42", 
     "updated_on": "2017-10-15" 
    }] 
}, 
"plancount": 3 

}

생각이 JSON 객체가 API의 사용으로 생성하고, 내가 원하는되어 있는지 Android의 회 전자에 다양한 "계획"을 동적으로 배치합니다. 현재는 값을 회 전자에 하드 코딩했지만 계획 수는 변경 될 수 있으며 매번 하드 코딩하지 않으려 고합니다.

Json 객체의 형식은 API가 이와 같은 방식으로 작성된 것이기 때문에 평소와 약간 다릅니다. API를 변경해야하는 대신 다른 계획을 추출하는 방법이 있습니까?

아래 난이 달성하기 위해 수행 한 단계는 다음과 같습니다

  1. 문자열 APIUrl는 =
  2. 내가 AsyncTask를 확장하는 클래스 DataAPI에 필요한 데이터와 함께 APIUrl를 보낸다 "API의 URL"을 Http POST 요청을 보냅니다.
  3. 서버 응답이 String JsonResult에 저장됩니다.
  4. 문자열에서 jsonObject를 만들고 확인했는지 여부 jsonObject.getString("status").equals("success")
  5. 필요한 문자열을 추출하는 방법이 있는지 모르겠다는 이유로 여기다 있습니다 ("1 : 계획 A (이코노미 플랜) ","플랜 B (디럭스 플랜) ","3 : 플랜 C (라마단) ") , "Plan C (Ramadan)")을 선택하고 Android 스피너에 배치합니다.

도움을 주셔서 감사 드리며 변경 사항이나 게시물에 포함시켜야 할 사항이 있으면 알려 주시기 바랍니다.

Gson gson = new Gson(); 
YourPojoOfJson yourObjectOfPojo = gson.fromJson(jsonObject,YourPojoOfJson .class); 

을 그리고 당신의 JSON의 POJO가 갈 수 있도록 :

+0

계획 수가 많아서 json을 pojo로 변환 할 수 없기 때문에'Map'을 사용해야한다고 생각합니다. 여기 [https : // stackoverflow]와 비슷한 예제를 볼 수 있습니다. .com/questions/47188934/how-to-turn-this-json-response-into-pojo) – Signo

답변

0

당신은 그 목적을 위해 GSON 사용할 수 있습니다 http://www.jsonschema2pojo.org/

가 당신의 JSON을 복사하고 오른쪽 패널과 없음에서 JSON을 선택합니다. 미리보기를 클릭하면 여러 클래스가 표시됩니다.이 클래스를 클릭하면 json의 객체를 만들 수 있습니다. 일단 당신이 클래스의 객체를 가지고 있다면, yu는 객체를 호출하고 get 속성을 사용하여 어디에서나 어떤 값을 얻을 수 있습니다.

+0

도움이되기를 바랍니다. 도움이 더 필요하면 문자를 보내주십시오. 그것이 작동하지 않는다면 대답 으로이 게시물을 표시하는 것을 잊지 :) –

0

비동기 HTTP POST 요청을 보내고 응답을 pojo로 변환하는 데 Retrofit (http://square.github.io/retrofit/)을 사용할 수 있습니다.

예 :

는 "데이터"jsonArray 당신은 그래서 당신은 반복 할 수 원하는 것을 달성 할 수 있어야합니다

@FormUrlEncoded 
@POST("user/edit") 
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last); 
0

내가 당신에게 내 메모를 말할 것이다 그래서 의견을 쓸 수있는 충분한 명성을하지 않습니다 간단하지만 "데이터"는 이제 jsonObject이고이 세 가지 계획이 있으며 각각의 키가 무엇인지 알아야합니다. 간단히 말해 "데이터"JsonArray 대신에 jsonObject 또는이 API를 제공 한 사람이 변경을 요청하면 반복 할 수 있습니다.

0

많은 분들께 감사드립니다. 내가 Gson, Pojo, Retrofit 등과 같이 경험이 없기 때문에 내가 끝내는 것을 게시하고 싶다. 희망을 갖고 나는 더 깊이 파고이 것들을 사용하는 법을 배울 것이다. 어쨌든 Json 객체를 문자열로 변환 한 다음 Pattern 컴파일러를 사용하여 필요한 문자열을 추출했습니다. 나는 이것을 Plan이라는 ArrayList에 넣습니다.

String temp = jsonObject.getJSONObject("data").toString(); 

Pattern p = Pattern.compile("\"(.*?)\":\\["); 
Matcher m = p.matcher(temp); 

m.find(); 

plans.add(m.group(1)); 

p = Pattern.compile("],\"(.*?)\":\\["); 
m = p.matcher(temp); 

while (m.find()){ 

    plans.add(m.group(1)); 

} 

status = true; 

return plans; 

더 많은 계획을 추가해야하는 경우 완벽하게 작동합니다. 따라서 더 좋은 방법을 찾아 낼 때까지 해결 방법이 될 것입니다.