2013-02-23 10 views
5

Tôi có một JSON phức tạp mà tôi đang cố gắng phân tích cú pháp bằng cách sử dụng JSON JSON. Tôi là một chút bối rối về làm thế nào để có được vào các đối tượng latLng để kéo ra các giá trị lat, lng. Đây là một phần của JSON:Sử dụng trình phân tích cú pháp JSON JSON: JSON phức tạp?

{ 
    "results": [ 
     { 
      "locations": [ 
       { 
        "latLng": { 
         "lng": -76.85165, 
         "lat": 39.25108 
        }, 
        "adminArea4": "Howard County", 
        "adminArea5Type": "City", 
        "adminArea4Type": "County", 

Đây là những gì tôi có cho đến nay trong Java để kéo nó ra:

public class parkJSON 
{ 
    public latLng _latLng; 

    public static class latLng 
    { 
     private String _lat, _lng; 
     public String getLat() { return _lat; } 
     public String getLon() { return _lng; } 
    } 
} 

ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally 
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
parkJSON geo = mapper.readValue(parse, parkJSON.class); 

System.out.println(mapper.writeValueAsString(geo)); 
String lat = geo._latLng.getLat(); 
String lon = geo._latLng.getLon(); 
output = lat + "," + lon; 
System.out.println("Found Coordinates: " + output); 

QUYẾT Đây là cách tôi giải quyết vấn đề bằng cách sử dụng Mô hình cây để tham khảo trong tương lai:

  ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally 
      mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);     
      JsonNode rootNode = mapper.readTree(parse); 
      JsonNode firstResult = rootNode.get("results").get(0); 
      JsonNode location = firstResult.get("locations").get(0); 
      JsonNode latLng = location.get("latLng"); 
      String lat = latLng.get("lat").asText(); 
      String lng = latLng.get("lng").asText(); 
      output = lat + "," + lng; 
      System.out.println("Found Coordinates: " + output); 

Trả lời

4

Nếu tất cả những gì bạn quan tâm trong cấu trúc đầu vào này là lat và lng full mapping có lẽ là ít được điều chỉnh theo các cách tiếp cận khác nhau do Jackson cung cấp, vì nó buộc bạn viết các lớp để biểu diễn các lớp khác nhau trong dữ liệu của bạn.

Có hai lựa chọn thay thế được cung cấp bởi Jackson mà sẽ cho phép bạn trích xuất các lĩnh vực này mà không cần phải xác định các lớp:

  1. The tree model cung cấp một số phương pháp điều hướng để đi qua cây và trích xuất các dữ liệu bạn quan tâm.
  2. Simple data binding ánh xạ tài liệu JSON lên Bản đồ hoặc Danh sách mà sau đó có thể được điều hướng bằng các phương thức do các bộ sưu tập này cung cấp.

Tài liệu Jackson chứa các ví dụ cho cả hai kỹ thuật, áp dụng chúng trong chương trình của bạn không quá khó, sử dụng trình gỡ rối của bạn để điều tra cấu trúc dữ liệu được tạo bởi trình phân tích cú pháp.

+0

Tôi làm cho nó hoạt động bằng phương pháp mô hình cây –

+0

Trình ánh xạ ObjectMapper = new ObjectMapper(); // có thể sử dụng lại, chia sẻ toàn cầu mapper.configure (DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, sai); JsonNode rootNode = mapper.readTree (phân tích cú pháp); JsonNode firstResult = rootNode.get ("kết quả"). Get (0); JsonNode location = firstResult.get ("vị trí"). Get (0); JsonNode latLng = location.get ("latLng"); Chuỗi lat = latLng.get ("lat"). AsText(); Chuỗi lng = latLng.get ("lng"). AsText(); –

+0

Thật tuyệt vời :-) Chúc bạn may mắn với dự án của mình. – fvu