Cách tiếp cận đơn giản nhất tôi có thể nghĩ là xử lý cấu trúc là Map
(của Map
).
Với Gson, điều này tương đối dễ thực hiện, miễn là cấu trúc Map
được biết đến tĩnh, mọi chi nhánh từ gốc đều có cùng độ sâu và mọi thứ đều là 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));
}
}
Đối xử lý Map
cấu trúc năng động hơn, tôi đề nghị chuyển sang sử dụng Jackson, thay vì Gson, như Jackson sẽ deserialize bất kỳ đối tượng JSON của bất kỳ phức tạp tùy ý vào một Java Map
, chỉ với một dòng mã đơn giản, và nó sẽ tự động giữ lại các loại giá trị nguyên thủy.
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);
}
}
Điều tương tự cũng có thể đạt được với Gson, nhưng nó đòi hỏi hàng tá dòng mã. (Plus, Gson có những thiếu sót khác làm cho việc chuyển sang Jackson cũng xứng đáng với nó.)
Nguồn
2011-07-22 22:59:18
Tôi muốn thêm rằng nếu bản đồ của bạn không được lồng vào nhau thì mọi thứ đơn giản hơn nhiều http://stackoverflow.com/questions/2779251/ how-can-i-convert-json-to-a-hashmap-using-gson –