2010-08-05 26 views
5

मृत चुप्पी! अक्सर आप स्टैक ओवरफ्लो पर अनुभव नहीं करते ... मैंने चीजों को पाने के लिए एक छोटा सा उपहार जोड़ा है!मैं एक बड़ी जेसन स्ट्रिंग को कैसे संशोधित करूं?

मैंने एक जेसन दस्तावेज़ बनाया है जिसमें विभिन्न देशों के स्थान के बारे में जानकारी है। मैंने कुछ कस्टम कुंजी जोड़ दी हैं। यह json-फ़ाइल की शुरुआत है:

{ 
    "type": "FeatureCollection", 
    "features": [ 
     { "type": "Feature", "properties": { 
      "NAME": "Antigua and Barbuda", 
      "banned/censored": "AG", 
      "Bombed": 29, 
      "LON": -61.783000, "LAT": 17.078000 }, 
    "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -61.686668,... 

सभी कस्टम कुंजी (बमबारी की, पर प्रतिबंध लगा दिया/सेंसर आदि) मान है, लेकिन वे सिर्फ वर्ष (फर्जी अगर आप चाहते हैं) कर रहे हैं मान। असली मान एक्सेल दस्तावेज़ से निकाले गए .csv फ़ाइल में रखे जाते हैं।

मैं उदा। यह है:

      banned/censored  bombed 
Antigua and Barbuda    2     120 
... 

अब मैं इन मानों को जेसन-फ़ाइल में उचित कुंजी के साथ मेल करना चाहता हूं। क्या वहां कोई प्रोग्राम है जिसका मैं उपयोग कर सकता हूं? एक और विकल्प जावा के लिए एक जेसन लाइब्रेरी होगी, जो किसी भी तरह से मैं जो चाहता हूं उसका समर्थन करता हूं। मैं अभी तक इसके लिए एक आसान समाधान खोजने में सक्षम रहा है। दस्तावेज बहुत बड़ा ~ 10 एमबी है, अगर इससे कोई फर्क पड़ता है!

संपादित करें: मैंने .shp फ़ाइल में हेरफेर करने के लिए QGIS का उपयोग किया है, इसलिए किसी प्रकार का एक्सटेंशन भी उपयोग किया जा सकता है।

उत्तर

7

बस जेएसओएन और सीएसवी दोनों को एक पूर्ण जावा ऑब्जेक्ट में कनवर्ट करें। इस तरह आप एक या दूसरे के आधार पर जावा ऑब्जेक्ट्स को बदलने के लिए अपने स्वाद में कोई जावा तर्क लिख सकते हैं। अंत में JSON डेटा का प्रतिनिधित्व करने वाले संशोधित जावा ऑब्जेक्ट को JSON स्ट्रिंग में कनवर्ट करें।

हालांकि आपके JSON में एक समस्या है। /banned/censored में JSON फ़ील्ड नाम के लिए एक वैध वर्ण नहीं है, इसलिए मौजूदा JSON deserializers में से कई इस पर चिल्ला सकते हैं। यदि आप इसे ठीक करते हैं, तो आप उनमें से एक का उपयोग करने में सक्षम होंगे।

मैं JSON और जावा के बीच कनवर्ट करने के लिए Google Gson का उपयोग करने की अनुशंसा कर सकता हूं।

class Data { 
    private String type; 
    private List<Feature> features; 
} 

class Feature { 
    private String type; 
    private Properties properties; 
    private Geometry geometry; 
} 

class Properties { 
    private String NAME; 
    private String bannedOrCensored; 
    private Integer Bombed; 
    private Double LON; 
    private Double LAT; 
} 

class Geometry { 
    private String type; 
    private Double[][][][] coordinates; 
} 

आप केवल और जोड़ने के लिए/टिककर खेल उत्पन्न की जरूरत है अपने आप को setters: यहाँ एक किकऑफ़ उदाहरण आपके JSON संरचना के आधार पर (banned/censored साथ bannedOrCensored नाम दिया) है। उसके बाद, आप के बीच JSON और जावा की तरह परिवर्तित करने के लिए सक्षम हो जाएगा इस प्रकार है:

Data data = new Gson().fromJson(jsonString, Data.class); 

सीएसवी और एक जावा वस्तु के बीच परिवर्तित करने के लिए, बस कई सीएसवी पारसर्स में से एक चुनें, OpenCSV की तरह। आप BufferedReader की सहायता से अपना खुद का घर भी बना सकते हैं।

अंत में, जावा वस्तु JSON डेटा का प्रतिनिधित्व करने में फेरबदल के बाद, आप इसे वापस JSON स्ट्रिंग को Gson की मदद से इस प्रकार परिवर्तित कर सकते हैं:

String json = new Gson().toJson(data); 
+0

यही वह था जिसे मैं टालना चाहता था। वैसे भी, मैं इसे आज़मा दूंगा। धन्यवाद! –

+0

आपके मन में क्या था? कुछ जादू? – BalusC

+2

एक प्रोग्राम जिसने मुझे कुछ कार्यक्षमताओं का समर्थन किया है, जिन्हें मैं ढूंढ रहा हूं। क्यूजीआईएस, या जो भी - जादू की तरह एक विस्तार की तरह। वैसे भी, आपको चीजें चल रही हैं। –

3

BalusC का जवाब आप कैसे अपने वर्तमान में यह करने के लिए कहता है जबकि सेटअप, मेरे पास एक और अधिक कट्टरपंथी सुझाव है: JSON से छुटकारा पाएं।

विचार से JSON डेटा स्टोर करने के लिए नहीं है - इसका उपयोग "हल्के पाठ-आधारित खुले मानक के रूप में किया जाना चाहिए जो मानव-पठनीय डेटा इंटरचेंज के लिए डिज़ाइन किया गया है"।यही कारण है:

  • कम यातायात (यथासंभव कम गैर सार्थक डेटा)
  • मानव पठनीय
  • गतिशील भाषाओं
  • दूसरी ओर

डाटा भंडार के साथ संभाल करने के लिए आसान इससे ज्यादा आवश्यकताएं। यही कारण है कि डेटाबेस मौजूद हैं। तो अपने भंडारण को डेटाबेस में ले जाएं। यदि आप पूर्ण-विशेषीकृत डेटाबेस नहीं चाहते हैं, तो HSQLDB या JavaDB जैसे कुछ का उपयोग करें।

+0

आप सही हैं। मैं डेटा स्टोरेज के लिए खुद जेएसओएन पसंद नहीं करता। लेकिन जब मैं ओपनलेयर और। एसएसपी फाइलों के साथ काम कर रहा था, मुझे लगा कि प्रारूप का उपयोग करना सबसे आसान था, क्योंकि ओपनलेयर geojson का उपयोग करते हैं, और .shp फ़ाइलों को gdal के माध्यम से geojson में परिवर्तित किया जा सकता है। –

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