GSON을 사용하여 Android에서 동적 "키" 및 "값"을 가진 JSON 구문 분석
저는 현재 json 파일을 반환하는 웹 서비스를 호출해야 하는 Android 프로젝트를 진행하고 있습니다.GSON 라이브러리를 사용하여 모든 json 파일을 해석하고 JSON 객체를 가져옵니다.키 필드가 동적인 이 json 데이터를 발견하기 전까지는 잘 작동하고 있었습니다.이 파일의 예는 다음과 같습니다.
{ "0": { "count":"5"},
"1": { "title":"...", "desc":"" },
"2": { "title":"...", "desc":"" },
"3": { "title":"...", "desc":"" },
"4": { "title":"...", "desc":"" },
"5": { "title":"...", "desc":"" },
"routes": { "route1":"...", "route3":"" },
}
키 ID "0"을 기준으로 카운트를 얻을 수 있지만, 이 값을 사용하여 필요한 데이터로 구성된 다른 키 오브젝트(키 ID 1~5)를 얻는 방법을 모르겠습니다.이 문제에 대해 누군가 저를 도와줄 수 있다면 정말 감사하겠습니다.감사해요.
내가 생각할 수 있는 가장 간단한 접근법은 단지 구조물을 하나의 구조물로 취급하는 것이다.Map
(의Map
).
Gson을 사용하면 이 작업은 비교적 간단합니다.Map
구조는 정적으로 알려져 있으며 루트로부터의 모든 브랜치는 같은 깊이를 가지며 모든 것은String
.
import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonFoo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType();
Map<String,Map<String, String>> map = gson.fromJson(new FileReader("input.json"), mapType);
System.out.println(map);
// Get the count...
int count = Integer.parseInt(map.get("0").get("count"));
// Get each numbered entry...
for (int i = 1; i <= count; i++)
{
System.out.println("Entry " + i + ":");
Map<String, String> numberedEntry = map.get(String.valueOf(i));
for (String key : numberedEntry.keySet())
System.out.printf("key=%s, value=%s\n", key, numberedEntry.get(key));
}
// Get the routes...
Map<String, String> routes = map.get("routes");
// Get each route...
System.out.println("Routes:");
for (String key : routes.keySet())
System.out.printf("key=%s, value=%s\n", key, routes.get(key));
}
}
더욱 역동적인Map
구조 처리, 잭슨이 임의의 복잡성의 JSON 오브젝트를 Java로 역직렬화 할 것이기 때문에 Gson 대신 Jackson을 사용하도록 전환할 것을 강력히 제안합니다.Map
단순한 코드 한 줄만으로도 원시 값의 유형을 자동으로 유지합니다.
import java.io.File;
import java.util.Map;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(new File("input.json"), Map.class);
System.out.println(map);
}
}
Gson에서도 마찬가지이지만 수십 줄의 코드가 필요합니다.(게다가 Gson은 잭슨으로의 전환이 충분히 가치가 있는 다른 단점도 있습니다.)
카운트를 사용하여 개별 주요 개체를 가져올 수 있습니다.오브젝트 "1"을 취득한 후 오브젝트 "title"과 "desc"를 취득하고 오브젝트 "2" 등을 취득합니다.
언급URL : https://stackoverflow.com/questions/6796662/using-gson-to-parse-a-json-with-dynamic-key-and-value-in-android
'programing' 카테고리의 다른 글
모든 기존 사용자에 대한 Wordpress 기본 표시 이름 변경 공개 (0) | 2023.03.02 |
---|---|
Wordpress cron wp_schedule_single_event – 액션이 항상 작동하지 않음 (0) | 2023.03.02 |
Angular는 어떻게 알아?JS를 "갱신"하다 (0) | 2023.03.02 |
Angularjs의 $http 사용 시 응답 헤더 읽기 (0) | 2023.03.02 |
JSON은 공백으로 되어 있습니다.시간 필드 (0) | 2023.03.02 |