2013-02-23 26 views
5

मेरे पास एक जटिल JSON है कि मैं जैक्सन JSON का उपयोग करके पार्स करने की कोशिश कर रहा हूं। लैट, एलएनजी मूल्यों को खींचने के लिए latLng ऑब्जेक्ट में कैसे पहुंचे इस बारे में मैं थोड़ा उलझन में हूं। यह JSON का हिस्सा है:जैक्सन जेएसओएन पार्सर का उपयोग: कॉम्प्लेक्स जेएसओएन?

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

यह वही है मैं अब तक जावा में इसे बाहर खींच है:

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); 

यह संकल्प इस तरह मैं भविष्य के संदर्भ के लिए ट्री मॉडल का उपयोग करके इस मुद्दे को हल किया:

  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); 

उत्तर

4

यदि आप वास्तव में इस इनपुट संरचना में रुचि रखते हैं तो लैट और एलएनजी पूर्ण मैपिंग शायद जैक्सन द्वारा प्रदान किए गए विभिन्न दृष्टिकोणों से कम से कम अनुकूलित है, क्योंकि यह आपको अपने डेटा में विभिन्न परतों का प्रतिनिधित्व करने के लिए कक्षाएं लिखने के लिए मजबूर करता है।

वहाँ है कि आप इन वर्गों को परिभाषित करने के लिए बिना इन क्षेत्रों को निकालने के लिए अनुमति देगा जैक्सन द्वारा की पेशकश की दो विकल्प हैं:

  1. The tree model पेड़ पार और डेटा आप कर रहे हैं निकालने के लिए नेविगेशन की अनेक विधियों का आनंद ले सकते हैं रुचि रखते हैं।
  2. Simple data binding JSON दस्तावेज़ को मानचित्र या सूची पर मानचित्र करता है जिसे बाद में इन संग्रहों द्वारा प्रदान की जाने वाली विधियों के साथ नेविगेट किया जा सकता है।

जैक्सन प्रलेखन में दोनों तकनीकों के लिए उदाहरण शामिल हैं, उन्हें आपके प्रोग्राम में लागू करना बहुत मुश्किल नहीं होना चाहिए, पार्सर द्वारा बनाई गई डेटा संरचनाओं की जांच करने के लिए अपने डीबगर का उपयोग करके यह देखने के लिए कि दस्तावेज़ कैसे मैप किया गया है।

+0

मुझे पेड़ मॉडल विधि –

+0

ऑब्जेक्टमैपर मैपर = नया ऑब्जेक्टमैपर(); // पुन: उपयोग कर सकते हैं, वैश्विक स्तर पर mapper.configure (DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, झूठी) साझा कर सकते हैं; जेसन नोड रूट नोड = mapper.readTree (पार्स); JsonNode firstResult = rootNode.get ("परिणाम")। (0) प्राप्त करें; जेसन नोड स्थान = firstResult.get ("स्थान")। (0) प्राप्त करें; जेसन नोड latLng = location.get ("latLng"); स्ट्रिंग लैट = latLng.get ("lat")। AsText(); स्ट्रिंग lng = latLng.get ("lng")। AsText(); –

+0

यह बढ़िया है :-) अपनी परियोजना के साथ शुभकामनाएँ। – fvu

संबंधित मुद्दे