2013-05-17 6 views
23

मुझे कुछ ऑब्जेक्ट्स को JSON पर क्रमबद्ध करने और वेब सेवा को भेजने की आवश्यकता है। मैं org.json लाइब्रेरी का उपयोग करके इसे कैसे कर सकता हूं? या मुझे किसी और का उपयोग करना होगा?जेएसओएन ऑब्जेक्ट को क्रमबद्ध करने के लिए कैसे?

public class PontosUsuario { 

    public int idUsuario; 
    public String nomeUsuario; 
    public String CPF; 
    public String email; 
    public String sigla; 
    public String senha; 
    public String instituicao; 

    public ArrayList<Ponto> listaDePontos; 


    public PontosUsuario() 
    { 
     //criando a lista 
     listaDePontos = new ArrayList<Ponto>(); 
    } 

} 

मैं केवल चर और वर्ग के निर्माता डाल लेकिन यह भी getters और setters है: यहाँ वर्ग मैं क्रमानुसार करने की जरूरत है। तो किसी को भी मदद कर सकते हैं, तो कृपया एनोटेशन के बिना यह करने के लिए

+0

और समस्या क्या है? – Blackbelt

+0

मुझे ऑब्जेक्ट्स को क्रमबद्ध करने में मुश्किल हो रही है क्योंकि मैं जैक्सन लिब के बारे में Google को थोड़ा नोबी –

+0

Google हूं। यह तुम्हे मदद करेगा। – user

उत्तर

38

आसान तरीके से उपयोग करने के लिए है Gson library

कि के रूप में सरल:

Gson gson = new Gson(); 
String json = gson.toJson(listaDePontos); 
+1

ग्रेट थोड़ा मुक्ति और डॉट 42 के साथ काम करता है यदि आप जार आयात करते हैं, लेकिन यह इन सभी '_backingFields_' को JSON में रखता है। मैंने डेटामेम्बर की कोशिश की लेकिन इससे मदद नहीं मिली। तो मैं 'स्ट्रिंगबिल्डर' पर वापस लौटा और बस इसे KISS रास्ता किया। – ppumkin

+1

यह छोटे आकार की वस्तुओं के लिए बहुत अच्छा है। ऑब्जेक्ट जटिल होने पर कई समस्याएं होती हैं, खासकर अगर बच्चे ऑब्जेक्ट रेफरेंस पैरेंट ऑब्जेक्ट्स – MFARID

+0

@MFARID क्या आप एंड्रॉइड के लिए एक विकल्प के बारे में जानेंगे? जैसे JSON.Net नेट के लिए है? –

6

तेज और आसान तरीका मैं Json-ify POJOs पाया है Gson library का उपयोग करना है। This blog post लाइब्रेरी का उपयोग करने का एक त्वरित अवलोकन देता है।

3

आप http अनुरोध

HttpResponse response = httpclient.execute(httpget);   
HttpEntity entity = response.getEntity(); 

inputStream = entity.getContent(); 

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
      StringBuilder sb = new StringBuilder(); 

आप पढ़ बफर बनाने

String line = null; 
while ((line = reader.readLine()) != null) 
{ 
sb.append(line + "\n"); 
} 
Log.d("Result", sb.toString()); 
result = sb.toString(); 

एक JSONObject बनाएँ और के लिए परिणाम स्ट्रिंग पारित निर्माता:

JSONObject json = new JSONObject(result); 

अपने वांछित चर पार्स json परिणाम:

String usuario= json.getString("usuario"); 
int idperon = json.getInt("idperson"); 
String nombre = json.getString("nombre"); 

आयात करने के लिए मत भूलना:

import org.json.JSONObject; 
+0

इस solutiuon एंड्रॉइड पर वास्तव में खराब प्रदर्शन है (ठीक है, हम कुछ छोटे JSON के बारे में बात नहीं करते हैं, इस मामले में इससे कोई फर्क नहीं पड़ता - लेकिन छोटी डेटा मात्रा बढ़ने लगती है) - आप बहुत अधिक वस्तुओं आवंटित कर रहे हैं (JSON PArser डोम मॉडल का उपयोग करता है) और स्मृति। आप बफर आवंटित किए बिना पुल पार्सर मोड के लिए जाएंगे। इसके अलावा GSON ir JAckson आपका मित्र है –

+0

मैं कुछ कोड ऐप्स में इस कोड का उपयोग कर रहा हूं और यह एक आकर्षण की तरह काम कर रहा है, और आपको तीसरे पक्ष के पुस्तकालयों का उपयोग करने की आवश्यकता नहीं है। –

+0

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

3

GSON उपयोग करने के लिए आसान है और अपेक्षाकृत छोटी स्मृति पदचिह्न है। आप भी छोटे पदचिह्न को पाने लोके हैं, तो आप हड़पने कर सकते हैं:

https://github.com/ko5tik/jsonserializer

कौन सा छोटे आवरण चारों ओर सिर्फ POJOs

2

शॉन लियरी द्वारा "संदर्भ" जावा कार्यान्वयन here on github है के लिए GSON पुस्तकालयों नीचे छीन लिया है। नवीनतम संस्करण होना सुनिश्चित करें - विभिन्न पुस्तकालय 200 9 से संस्करणों के बग्गी पुराने संस्करणों में खींचते हैं।

जावा ईई 7 में javax.json में एक JSON API है, Javadoc देखें। जो मैं बता सकता हूं, उसके पास JSON पर किसी ऑब्जेक्ट को मार्शल करने का कोई आसान तरीका नहीं है, आपको JsonObject या JsonArray बनाने की आवश्यकता है।

import javax.json.*; 

JsonObject value = Json.createObjectBuilder() 
.add("firstName", "John") 
.add("lastName", "Smith") 
.add("age", 25) 
.add("address", Json.createObjectBuilder() 
    .add("streetAddress", "21 2nd Street") 
    .add("city", "New York") 
    .add("state", "NY") 
    .add("postalCode", "10021")) 
.add("phoneNumber", Json.createArrayBuilder() 
    .add(Json.createObjectBuilder() 
     .add("type", "home") 
     .add("number", "212 555-1234")) 
    .add(Json.createObjectBuilder() 
     .add("type", "fax") 
     .add("number", "646 555-4567"))) 
.build(); 

JsonWriter jsonWriter = Json.createWriter(...); 
jsonWriter.writeObject(value); 
jsonWriter.close(); 

लेकिन मुझे लगता है कि जीएसओएन जैसे अन्य पुस्तकालयों में उन इंटरफेस को लागू करने वाली वस्तुओं को बनाने के लिए एडाप्टर होंगे।

0

JAVAEE8 प्रकाशित करने के बाद, अब आप नए JAVAEE एपीआई JSON-B (JSR367)

उपयोग कर सकते हैं

Maven निर्भरता:

Jsonb jsonb = JsonbBuilder.create(); 
// Two important API : toJson fromJson 
String result = jsonb.toJson(listaDePontos); 

JSON-पी:

<dependency> 
    <groupId>javax.json.bind</groupId> 
    <artifactId>javax.json.bind-api</artifactId> 
    <version>1.0</version> 
</dependency> 

<dependency> 
    <groupId>org.eclipse</groupId> 
    <artifactId>yasson</artifactId> 
    <version>1.0</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.json</artifactId> 
    <version>1.1</version> 
</dependency> 

यहाँ कुछ कोड स्नैपशॉट है 1.1 को भी अपडेट किया गया है और उपयोग करने में आसान है। JSON-P 1.1 (JSR374)

Maven निर्भरता:

<dependency> 
    <groupId>javax.json</groupId> 
    <artifactId>javax.json-api</artifactId> 
    <version>1.1</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.json</artifactId> 
    <version>1.1</version> 
</dependency> 

यहाँ runnable कोड स्नैपशॉट है:

String data = "{\"name\":\"Json\"," 
       + "\"age\": 29," 
       + " \"phoneNumber\": [10000,12000]," 
       + "\"address\": \"test\"}"; 
     JsonObject original = Json.createReader(new StringReader(data)).readObject(); 
     /**getValue*/ 
     JsonPointer pAge = Json.createPointer("/age"); 
     JsonValue v = pAge.getValue(original); 
     System.out.println("age is " + v.toString()); 
     JsonPointer pPhone = Json.createPointer("/phoneNumber/1"); 
     System.out.println("phoneNumber 2 is " + pPhone.getValue(original).toString()); 
संबंधित मुद्दे