2011-08-24 15 views
28

क्या किसी के पास JSON दस्तावेज़ को XLS/CSV फ़ाइल में कनवर्ट करने के लिए कोई नमूना जावा कोड है? मैंने Google पर खोजने की कोशिश की है लेकिन इसका कोई फायदा नहीं हुआ है।जावा में JSON से XLS/CSV को कनवर्ट करना

+0

देखें मैट न्यूयॉर्क के जवाब यहाँ: http://stackoverflow.com/questions/662859/convert-csv -xls-to-json – JMax

+0

वह जेसन से सीएसवी के लिए पूछ रहा है ... अन्य तरीकों से नहीं। –

उत्तर

-2

एक JSON दस्तावेज़ मूल रूप से सूचियों और शब्दकोशों के होते हैं। एक द्वि-आयामी तालिका पर इस तरह के डेटास्ट्रक्चर को मैप करने का कोई स्पष्ट तरीका नहीं है।

+1

यदि JSON फ़ाइल एक फ्लैट सरणी है, तो सभी ऑब्जेक्ट्स के समान फ़ील्ड नाम होते हैं, तो इसे दो आयामी तालिका में मैप किया जा सकता है। @ श्रीधर के उदाहरण इनपुट देखें। –

3

आप सीएसवी प्रारूप में कनवर्ट करने के लिए कॉमन्स सीएसवी का उपयोग कर सकते हैं। या एक्सएलएस में कनवर्ट करने के लिए पीओआई का उपयोग करें। यदि आपको एक्सएलएस में परिवर्तित करने के लिए सहायक की आवश्यकता है, तो आप jxls का उपयोग कर सकते हैं, यह जावा बीन (या सूची) को अभिव्यक्ति भाषा के साथ एक्सेल में परिवर्तित कर सकता है।

असल में, जेसन डॉक शायद एक जेसन सरणी है, है ना? तो यह वही होगा। नतीजा सूची होगी, और आप केवल उस संपत्ति को लिखते हैं जिसे आप एक्सेल प्रारूप में प्रदर्शित करना चाहते हैं जो jxls द्वारा पढ़ा जाएगा। http://jxls.sourceforge.net/reference/collections.html

यदि समस्या यह है कि जेसन को एक्सेल संपत्ति में जेसन नहीं पढ़ा जा सकता है, तो इसे पहले जावा बीन के संग्रह में क्रमबद्ध करें।

+0

आप '{' foo ': {' bar ': [1, 2, 3]}}' को स्प्रेडशीट पर कैसे मैप करेंगे? –

+0

यही कारण है कि मैंने कहा, यदि जेसन ऑब्जेक्ट जेसन एकल ऑब्जेक्ट है, जेसन सरणी नहीं है, तो परिणाम स्प्रेडशीट में 1 पंक्ति होगी। यदि जेसन ऑब्जेक्ट जेसन सरणी है, तो पंक्तियां जेसन सरणी आकार के साथ समान होंगी। और 1 फिर, आपको यह निर्दिष्ट करना होगा कि आप उस स्प्रेडशीट में किस संपत्ति को लिखना चाहते हैं। यदि आपका उदाहरण है, यदि आप बार (जो मान सरणी है) प्रदर्शित करना चाहते हैं, तो कॉलम शायद [email protected] प्रदर्शित होगा, लेकिन यह एक सरणी है, ठीक है। लेकिन अगर वस्तु है [{name: 'a', 'bar': [1,2,3]}, {name: 'b', 'bar': [2,3,4]}], और आप चाहते हैं केवल नाम प्रदर्शित करने के लिए, यह व्यवहार्य है, है ना? – Jef

25

आप केवल एक JSON सरणी को CSV फ़ाइल में परिवर्तित कर सकते हैं।

कहना चलें, तो आपको निम्न की तरह एक JSON है:

import java.io.File; 
import java.io.IOException; 

import org.apache.commons.io.FileUtils; 
import org.json.CDL; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class JSON2CSV { 
    public static void main(String myHelpers[]){ 
     String jsonString = "{\"infile\": [{\"field1\": 11,\"field2\": 12,\"field3\": 13},{\"field1\": 21,\"field2\": 22,\"field3\": 23},{\"field1\": 31,\"field2\": 32,\"field3\": 33}]}"; 

     JSONObject output; 
     try { 
      output = new JSONObject(jsonString); 


      JSONArray docs = output.getJSONArray("infile"); 

      File file=new File("/tmp2/fromJSON.csv"); 
      String csv = CDL.toString(docs); 
      FileUtils.writeStringToFile(file, csv); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }   
    } 

} 

अब तुम मिल गया JSON से CSV उत्पन्न:

{"infile": [{"field1": 11,"field2": 12,"field3": 13}, 
      {"field1": 21,"field2": 22,"field3": 23}, 
      {"field1": 31,"field2": 32,"field3": 33}]} 

परिवर्तित यह करने के लिए csv के लिए कोड देखते हैं।

यह इस तरह दिखना चाहिए:

field1,field2,field3 
11,22,33 
21,22,23 
31,32,33 

Maven निर्भरता था, जैसे

<dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20090211</version> 
</dependency> 
+0

इस कोड के लिए धन्यवाद लेकिन मैं जावा में नया हूं और इसे काम करने में समस्या है। 'जेसनआउट' और 'प्रतिक्रिया' चर परिभाषित नहीं हैं। कोई उपाय? एक बार फिर धन्यवाद! – hhh

+0

FileUtils.writeStringToFile (फ़ाइल, सीएसवी); –

+0

को बहिष्कृत किया गया है org.json.CDL का उपयोग करने का एक और तरीका है? मुझे लगता है कि उस वर्ग को मेरे एंड्रॉइड प्रोजेक्ट में आयात करने में सक्षम नहीं है – keinabel

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