जैक्सन के साथ जावा वस्तुओं को जावा वस्तुओं में परिवर्तित करना


166

मैं चाहता हूं कि मेरा JSON ऐसा दिखे:

{
    "information": [{
        "timestamp": "xxxx",
        "feature": "xxxx",
        "ean": 1234,
        "data": "xxxx"
    }, {
        "timestamp": "yyy",
        "feature": "yyy",
        "ean": 12345,
        "data": "yyy"
    }]
}

अब तक का कोड:

import java.util.List;

public class ValueData {

    private List<ValueItems> information;

    public ValueData(){

    }

    public List<ValueItems> getInformation() {
        return information;
    }

    public void setInformation(List<ValueItems> information) {
        this.information = information;
    }

    @Override
    public String toString() {
        return String.format("{information:%s}", information);
    }

}

तथा

public class ValueItems {

    private String timestamp;
    private String feature;
    private int ean;
    private String data;


    public ValueItems(){

    }

    public ValueItems(String timestamp, String feature, int ean, String data){
        this.timestamp = timestamp;
        this.feature = feature;
        this.ean = ean;
        this.data = data;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    public String getFeature() {
        return feature;
    }

    public void setFeature(String feature) {
        this.feature = feature;
    }

    public int getEan() {
        return ean;
    }

    public void setEan(int ean) {
        this.ean = ean;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return String.format("{timestamp:%s,feature:%s,ean:%s,data:%s}", timestamp, feature, ean, data);
    }
}

मुझे सिर्फ यह याद आ रहा है कि मैं जैसन के साथ जावा ऑब्जेक्ट को जेन्स में कैसे बदल सकता हूं:

public static void main(String[] args) {
   // CONVERT THE JAVA OBJECT TO JSON HERE
    System.out.println(json);
}

मेरा प्रश्न है: क्या मेरी कक्षाएं सही हैं? मुझे कौन सा उदाहरण कॉल करना है और कैसे मैं इस JSON आउटपुट को प्राप्त कर सकता हूं?


4
निम्नलिखित ट्यूटोरियल मदद कर सकता है: mkyong.com/java/how-to-convert-java-object-to-from-json-jackson
Maple_shaft

धन्यवाद जिसने मेरी मदद की :)
JustTheApretGirl

यदि इकाई अन्य तालिकाओं में शामिल हो गई है तो इस तरह से अनुसरण करें .. /programming/19928151/convert-entity-object-to-json/45695714#45695714
सेडिट वाई

जवाबों:


417

objectजैक्सन के साथ अपने JSON में परिवर्तित करने के लिए :

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);

9
केवल एक चीज है जो स्ट्रिंग ऑब्जेक्टवॉटर से बच गई है। उपयोग करें: नया JSONObject (ow.writeValueAsString (msg)) यदि यह Restful जैसी वेब सेवाओं के माध्यम से बाहर भेजा जा रहा है।
jmarcosSF

ब्याज से बाहर क्यों यह os.writeValueAsJSONString (ऑब्जेक्ट) नहीं है?
डेविलकोड

3
मैं इस त्रुटि का सामना कर रहा हूं, अपने कोड के साथ कैसे हल करें। कोई वर्ग सीरियल कॉमेडी के लिए नहीं मिला। liveprocessor.LPClient.LPTransaction और कोई गुण जो कि BeanSerializer बनाने के लिए नहीं खोजा गया (अपवाद से बचने के लिए, SerializationFeature को अक्षम करें।

11
रास्ते से पुस्तकालयों: आयात com.fasterxml.jackson.databind.ObjectMapper; आयात com.fasterxml.jackson.databind.ObjectWriter;
डाईगो मैटोस - केके

objectसभी क्षेत्रों के लिए जरूरी है, जो आप चाहते हैं कि आपके JSON शामिल हैं।
Drakonoved

25

मुझे पता है कि यह पुराना है (और मैं जावा में नया हूं), लेकिन मैं उसी समस्या में भाग गया। और उत्तर मेरे लिए एक नौसिखिया के रूप में स्पष्ट नहीं थे ... इसलिए मैंने सोचा कि मैं जो सीखता हूं उसे जोड़ दूंगा।

मैंने प्रयास में सहायता के लिए एक तीसरे पक्ष के पुस्तकालय का उपयोग किया: इसके लिए org.codehaus.jackson सभी डाउनलोड यहां देखे जा सकते हैं

बेस JSON कार्यक्षमता के लिए, आपको अपनी परियोजना के पुस्तकालयों में निम्नलिखित जार जोड़ने की आवश्यकता है: जैक्सन-मैपर-एसएल और जैकसन-कोर-एसएल

उस संस्करण को चुनें जिसे आपकी परियोजना की जरूरत है। (आमतौर पर आप नवीनतम स्थिर बिल्ड के साथ जा सकते हैं)।

एक बार जब वे आपकी परियोजना के पुस्तकालयों में आयात हो जाते हैं, तो निम्नलिखित importपंक्तियों को अपने कोड में जोड़ें:

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.ObjectMapper;

जावा ऑब्जेक्ट परिभाषित और असाइन किए गए मानों के साथ, जिन्हें आप JSON में कनवर्ट करना चाहते हैं और एक RESTful वेब सेवा के हिस्से के रूप में वापस आते हैं

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "sampleU@example.com";

ObjectMapper mapper = new ObjectMapper();

try {
    // convert user object to json string and return it 
    return mapper.writeValueAsString(u);
}
catch (JsonGenerationException | JsonMappingException  e) {
    // catch various errors
    e.printStackTrace();
}

परिणाम इस तरह दिखना चाहिए: {"firstName":"Sample","lastName":"User","email":"sampleU@example.com"}


मेरा मानना ​​है कि 'आयात' लाइनें "आयात com.fasterxml.jackson.databind.ObMMapper" में बदल गई हैं;
बैरीपिकर

16

यह उपयोगी हो सकता है:

objectMapper.writeValue(new File("c:\\employee.json"), employee);

// display to console
Object json = objectMapper.readValue(
     objectMapper.writeValueAsString(employee), Object.class);

System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
     .writeValueAsString(json));

10

बस यह करो

 for jackson it's
         ObjectMapper mapper = new ObjectMapper();  
         return mapper.writeValueAsString(object);
         //will return json in string


 for gson it's:
            Gson gson = new Gson();
            return Response.ok(gson.toJson(yourClass)).build();

Response.ok क्या है?
कोड

मुझे JSON के आकार की समस्या थी, जिसे mongoDB में डाला गया था, यह अनुमत सीमा से ऊपर था, जब मैं अपने Gson ऑब्जेक्ट को चालू करता हूं, तो जैक्सन की तुलना में इसका बड़ा आकार होता है। बस एक टिप।
डेनिएला मोरिस

14
सवाल यह है कि jackson, नहींGson
इयान वी

2
@Codeversed प्रतिक्रिया जर्सी पुस्तकालय में एक वर्ग है। Response.ok स्थिति कोड 200 के साथ JSON प्रतिक्रिया लौटाएगा।
प्रणव

2

ठीक है, यहां तक ​​कि स्वीकृत जवाब बिल्कुल भी आउटपुट नहीं करता है कि ऑप ने क्या पूछा है। यह JSON स्ट्रिंग को आउटपुट करता है लेकिन "पात्रों के साथ बच गया। इसलिए, हालांकि थोड़ी देर हो सकती है, मैं उम्मीद कर रहा हूं कि यह लोगों की मदद करेगा! यहाँ है मैं इसे कैसे करते हैं:

StringWriter writer = new StringWriter();
JsonGenerator jgen = new JsonFactory().createGenerator(writer);
jgen.setCodec(new ObjectMapper());
jgen.writeObject(object);
jgen.close();
System.out.println(writer.toString());


2

नोट: सबसे मतदान समाधान काम करे, इसके POJO में विशेषताओं का होना जरूरी publicहै या एक सार्वजनिक है getter/ setter:

डिफ़ॉल्ट रूप से, जैक्सन 2 केवल उन फ़ील्ड्स के साथ काम करेगा जो या तो सार्वजनिक हैं, या जिनके पास एक सार्वजनिक गेट्टर विधि है - एक ऐसी इकाई को सीरियल करना जिसमें सभी फ़ील्ड निजी या पैकेज निजी हों, विफल हो जाएंगे।

अभी तक परीक्षण नहीं किया गया है, लेकिन मेरा मानना ​​है कि यह नियम Google Gson जैसे अन्य JSON लिबास के लिए भी लागू होता है।


0
public class JSONConvector {

    public static String toJSON(Object object) throws JSONException, IllegalAccessException {
        String str = "";
        Class c = object.getClass();
        JSONObject jsonObject = new JSONObject();
        for (Field field : c.getDeclaredFields()) {
            field.setAccessible(true);
            String name = field.getName();
            String value = String.valueOf(field.get(object));
            jsonObject.put(name, value);
        }
        System.out.println(jsonObject.toString());
        return jsonObject.toString();
    }


    public static String toJSON(List list ) throws JSONException, IllegalAccessException {
        JSONArray jsonArray = new JSONArray();
        for (Object i : list) {
            String jstr = toJSON(i);
            JSONObject jsonObject = new JSONObject(jstr);
            jsonArray.put(jsonArray);
        }
        return jsonArray.toString();
    }
}

बहुत काम, बहुत ज्यादा प्रतिबिंब! Mappers आप इन बॉयलरप्लेट सामान करने से मुक्त करने वाले हैं!
इयान वी

3
मैं Convectors प्यार करता हूँ!
क्रिस्टोस

0

आप इस तरह से Google Gson का उपयोग कर सकते हैं

UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.