2011-04-26 33 views
18

Vì vậy, tôi đang sử dụng GSON để phân tích cú pháp JSON từ một API và bị kẹt như thế nào để phân tích cú pháp các trường động trong dữ liệu.Làm cách nào để phân tích cú pháp các trường JSON động bằng GSON?

Dưới đây là một ví dụ về dữ liệu JSON trở lại trên một truy vấn:

{ 

- 
30655845: { 
    id: "30655845" 
    name: "testdata 
    description: "" 
    latitude: "38" 
    longitude: "-122" 
    altitude: "0" 
    thumbnailURL: http://someimage.com/url.jpg 
    distance: 9566.6344386665 
} 
- 
28688744: { 
    id: "28688744" 
    name: "testdata2" 
    description: "" 
    latitude: "38" 
    longitude: "-122" 
    altitude: "0" 
    thumbnailURL: http://someimage.com/url.jpg 
    distance: 9563.8328713012 
} 
} 

Con đường tôi hiện đang xử lý các giá trị tĩnh duy nhất là với một lớp:

import com.google.gson.annotations.SerializedName; 

public class Result 
{ 
@SerializedName("id") 
public int id; 

@SerializedName("name") 
public String name; 

@SerializedName("description") 
public String description; 

@SerializedName("latitude") 
public Double latitude; 

@SerializedName("longitude") 
public Double longitude; 

@SerializedName("altitude") 
public Double altitude; 

@SerializedName("thumbnailURL") 
public String thumbnailURL; 

@SerializedName("distance") 
public Double distance; 
} 

Và sau đó tôi có thể chỉ cần sử dụng GSON để phân tích cú pháp đó:

Gson gson = new Gson(); 

Reader reader = new InputStreamReader(source); 

Result response= gson.fromJson(reader, Result.class); 

Tôi biết điều này hoạt động trên dữ liệu phụ khi tôi có thể truy vấn và nhận một mục nhập và phân tích cú pháp khá dễ dàng, nhưng những gì về các giá trị số nguyên ngẫu nhiên được đưa ra cho mỗi giá trị trong mảng? (tức là 30655845 và 2868874)

Bất kỳ trợ giúp nào?

Trả lời

19

Theo GSON documentation bạn có thể làm những việc như:

Type mapType = new TypeToken<Map<Integer, Result> >() {}.getType(); // define generic type 
Map<Integer, Result> result= gson.fromJson(new InputStreamReader(source), mapType); 

Hoặc bạn có thể thử để viết custom serializer cho lớp học của bạn.

Tuyên bố từ chối trách nhiệm: Tôi cũng vậy, không có kinh nghiệm với GSon nhưng với các khung công tác khác như Jackson.

+1

Đóng đinh nó, điều này làm việc hoàn hảo. Cám ơn rất nhiều. : D –

+0

Có cách nào để phân tích cú pháp giống nhau nhưng sử dụng NewtonSoft không? –

Các vấn đề liên quan