জ্যাকসনের অবজেক্টম্যাপার ব্যবহার করে জেএসওন সামগ্রীর অর্ডার


92

আমি আমার জাভা- জসন ম্যাপিং করতে অবজেক্টম্যাপার ব্যবহার করছি ।

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
ow.writeValue(new File( fileName +".json"), jsonObj);

এটি আমার জাভা ক্লাস:

public class Relation {

private String id;
private String source;
private String target;
private String label;
private List<RelAttribute> attributes;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getSource() {
    return source;
}

public void setSource(String source) {
    this.source = source;
}

public String getTarget() {
    return target;
}

public void setTarget(String target) {
    this.target = target;
}

public String getLabel() {
    return label;
}
public void setLabel(String label) {
    this.label = label;
}

public void setAttributes(List<RelAttribute> attributes) {
    this.attributes = attributes;
}

public List<RelAttribute> getAttributes() {
    return attributes;
}

}

এটাই আমি পাই:

{
    "id" : "-75da69d3-79c8-4000-a3d8-b10350a57a7e",
    "attributes" : [ {
      "attrName" : "ID",
      "attrValue" : ""
    }, {
      "attrName" : "Description",
      "attrValue" : "Primary Actor"
    }, {
      "attrName" : "Status",
      "attrValue" : ""
    } ],
    "label" : "new Label",
    "target" : "-46b238ac-b8b3-4230-b32c-be9707f8b691",
    "source" : "-daa34638-061a-45e0-9f2e-35afd6c271e0"
  }

সুতরাং এখন আমার প্রশ্ন, আমি কীভাবে এই জসন আউটপুট পেতে পারি:

{
    "id" : "-75da69d3-79c8-4000-a3d8-b10350a57a7e",
    "label" : "new Label",
    "target" : "-46b238ac-b8b3-4230-b32c-be9707f8b691",
    "source" : "-daa34638-061a-45e0-9f2e-35afd6c271e0",
    "attributes" : [ {
      "attrName" : "ID",
      "attrValue" : ""
    }, {
      "attrName" : "Description",
      "attrValue" : "Primary Actor"
    }, {
      "attrName" : "Status",
      "attrValue" : ""
    } ]

  }

আমি আমার জাভা ঘোষণার মতো এটি একই আদেশে চাই। এটি নির্দিষ্ট করার কোনও উপায় আছে? হতে পারে এমন টীকা বা স্টাফ দিয়ে?


4
কোনও কোড / ডিজাইনের গন্ধের জন্য সম্পত্তি অর্ডারটি উল্লেখযোগ্য পয়েন্ট। जेএসএন যা কিছু খাচ্ছে সেটিকে অর্ডারটি (হ্যাঁ, বৈশিষ্ট্যগুলির তালিকাভুক্ত করা উচিত) যত্ন করা উচিত নয়।
এইচ

26
আমার কেবল এটি পঠনযোগ্যতার জন্য প্রয়োজন :-)
জাস্টসাইড

11
@ এটি ঠিক সত্য নয় অর্ডার করা মানচিত্রটি একটি খুব সাধারণ এবং খুব দরকারী, ডেটা ধরণের। পছন্দসই অর্ডার মোটেই গন্ধ নয়।
ছাগল

উত্তর:



5

আপনি কি জানেন যে বর্ণানুক্রমিক ক্রম নির্দিষ্ট করার জন্য কোনও সুবিধাজনক উপায় আছে?

@JsonPropertyOrder(alphabetic = true)
public class Relation { ... }

আপনার যদি নির্দিষ্ট প্রয়োজনীয়তা থাকে তবে এখানে আপনি কীভাবে কাস্টম অর্ডার কনফিগার করবেন:

@JsonPropertyOrder({ "id", "label", "target", "source", "attributes" })
public class Relation { ... }

3

তুমি ব্যবহার করতে পার @XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "response", propOrder = { "prop1", "prop2",
        "prop3", "prop4", "prop5", "prop6" }).

@JsonPropertyOrder যুক্ত করার জন্য একটি নতুন জার দরকার।


4
@ জসনপ্রপার্টিআর্ডারের জন্য নতুন জারের দরকার নেই কারণ আপনি যদি জ্যাকসনটি ইতিমধ্যে অন্তর্ভুক্ত করেন তবে এটি ব্যবহার করুন।
প্যাট্রিক

4
এটা তোলে ফ্রেমওয়ার্ক যা আপনাকে using.If যদি আপনি আছে আত জ্যাকসন তারপর এটাকে আরও ভাল উপরে বাস্তবায়ন যদি আপনি XML ফর্ম্যাটে ডেটা ফিরিয়ে করতে চান যা উভয় JSON এবং XML এবং কোন প্রয়োজন অতিরিক্ত কনফিগারেশনের জন্য প্রযোজ্য হবে সঙ্গে যেতে ব্যবহার করেন তার উপর নির্ভর করে
user1001

হ্যাঁ, তবে জ্যাকসন ব্যবহার করে প্রশ্নটি করা হয়েছিল। আপনি যদি জ্যাকসন ব্যবহার না করে সমাধান সরবরাহ করতে চান তবে আপনাকে নিজের উত্তরে আরও স্পষ্ট হতে হবে।
প্যাট্রিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.