জ্যাকসনের সাথে জাভা বিষয়গুলিকে জেএসএনে রূপান্তর করা


166

আমি চাই আমার জেএসএন এর মতো দেখতে:

{
    "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
ম্যাপেল_শ্যাফ্ট

ধন্যবাদ যে আমাকে সাহায্য করেছে :)
JustTheAভারGirl

সত্তা যদি অন্য টেবিলগুলিতে যোগদান করে তবে এই
উপায়টি

উত্তর:


417

আপনার objectজ্যাকসনের সাথে জেএসনে রূপান্তর করতে :

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

9
কেবলমাত্র স্ট্রিংটি অবজেক্ট রাইটার থেকে পালিয়ে আসে। ব্যবহার করুন: নতুন JSONObject (ow.writeValueAsString (msg)) যদি এটি RESTful এর মতো ওয়েব পরিষেবাদির মাধ্যমে প্রেরণ করা হয়।
jmarcosSF

আগ্রহের বাইরে কেন এটি os.writeValueAsJSON স্ট্রিং (অবজেক্ট) নয়?
ডেভিলকোড

3
আমি এই ত্রুটি সম্মুখীন করছি, আপনার কোড কোন serializer সঙ্গে সমাধান কিভাবে বর্গ com.liveprocessor.LPClient.LPTransaction জন্য পাওয়া যায় এবং কোন বৈশিষ্ট্যাবলী (এড়ানোর ব্যতিক্রম, নিষ্ক্রিয় SerializationFeature.FAIL_ON_EMPTY_BEANS)) BeanSerializer তৈরি করতে আবিষ্কৃত

11
উপায় দ্বারা লাইব্রেরি: আমদানি com.fasterxml.jackson.databind.ObjectMapper; আমদানি com.fasterxML.jackson.databind.ObjectWriter;
ডিয়েগো ম্যাটোস - কেকে

objectসমস্ত ক্ষেত্রের জন্য অবশ্যই জেটর থাকতে হবে, আপনি চাইলে আপনার জেএসওএন অন্তর্ভুক্ত রয়েছে।
ড্রাকনোভেড

25

আমি জানি এটি পুরানো (এবং আমি জাভাতে নতুন) তবে আমি একই সমস্যায় পড়েছি। এবং উত্তরগুলি আমার কাছে নবাগতের মতো পরিষ্কার ছিল না ... তাই আমি ভেবেছিলাম যে আমি যা শিখেছি তা যুক্ত করব।

প্রচেষ্টায় সহায়তার জন্য আমি একটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করেছি: org.codehaus.jackson এর জন্য ডাউনলোডের সবগুলি এখানে পাওয়া যাবে

বেস জেএসএন কার্যকারিতার জন্য আপনার প্রকল্পের লাইব্রেরিতে আপনাকে নীচের জারগুলি যুক্ত করতে হবে: জ্যাকসন-ম্যাপার-এসেল এবং জ্যাকসন-কোর-আসল

আপনার প্রকল্পের প্রয়োজনীয় সংস্করণটি চয়ন করুন। (সাধারণত আপনি সর্বশেষতম স্থিতিশীল বিল্ডের সাথে যেতে পারেন)।

এগুলি একবার আপনার প্রকল্পের লাইব্রেরিতে আমদানি হয়ে গেলে আপনার কোডটিতে নিম্নলিখিত importলাইনগুলি যুক্ত করুন :

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

জাভা অবজেক্টটি সংজ্ঞায়িত এবং নির্ধারিত মানগুলির সাথে আপনি JSON এ রূপান্তর করতে চান এবং একটি রেস্টস্টুল ওয়েব পরিষেবার অংশ হিসাবে ফিরে যেতে চান

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.ObjectMapper;" এ পরিবর্তিত হয়েছে;
ব্যারিপিকার

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

রেসপন্স.ওক কী?
কোডওয়ার্ড হয়েছে

মঙ্গোডিবিতে Jোকানো জেএসএন মাপের সাথে আমার একটি সমস্যা ছিল, যখন আমি আমার জিএসনটি চালু করি তখন জ্যাকসনের চেয়ে বড় আকার থাকে। শুধু একটি টিপ।
ড্যানিয়েলা মোরেইস

14
প্রশ্নটি সম্পর্কে jackson, নাGson
ইয়ান ভি

2
@ কোডভার্সড রেসপন্স জার্সি লাইব্রেরির একটি ক্লাস।
রেসপন্স.ওক

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 কেবলমাত্র এমন ক্ষেত্রগুলির সাথে কাজ করবে যা হয় পাবলিক, বা পাবলিক গেটর পদ্ধতি রয়েছে - এমন একটি সত্তা ক্রমিকায়িত করা হবে যাতে সমস্ত ক্ষেত্রের ব্যক্তিগত বা প্যাকেজ ব্যক্তিগত রয়েছে fail

এখনও পরীক্ষিত নয়, তবে আমি বিশ্বাস করি যে এই বিধিটি গুগল জিসনের মতো অন্যান্য জেএসওএন লিবসের জন্যও প্রযোজ্য।


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

খুব বেশি কাজ, খুব বেশি প্রতিচ্ছবি! ম্যাপাররা আপনাকে এই বয়লারপ্লেট স্টাফগুলি মুক্ত করার কথা বলে!
ইয়ান ভি

3
আমি কনভেেক্টরকে ভালবাসি!
ক্রিস্টোস

0

আপনি গুগল জিসনকে এটি ব্যবহার করতে পারেন

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

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.