2012-06-12 53 views
5

Tôi rất mới với Json và mục tiêu của mình để tạo ra kết quả Json dưới đây từ hạt Java. Tôi nên cấu trúc đối tượng Java của mình như thế nào? Tôi có nên có lớp MyResult và Người dùng và Kết quả làm lớp con không? Tôi có thể sử dụng thư viện Json nào cho điều này?Json - Đối tượng Java với Json

“MyResult” { 
    “AccountID”: “12345”, 
    "User" { 
     "Name": "blah blah", 
     "Email": “[email protected]”, 
    }, 
    "Result" { 
     "Course": “blah”, 
     "Score": “10.0” 
    } 
} 
+0

Cảm ơn bạn đã trả lời. Nếu tôi thiết kế cái này ở Jackson, thì đối tượng Java của tôi trông như thế nào? – user238021

Trả lời

9

Lưu ý: Tôi là trưởng nhóm EclipseLink JAXB (MOXy) và là thành viên của nhóm chuyên gia JAXB (JSR-222).


Làm thế nào tôi nên cấu trúc đối tượng Java của tôi?

Dưới đây là mô hình đối tượng của bạn. Liên kết JSON của MOXy thúc đẩy các chú thích JAXB để ánh xạ mô hình miền tới JSON, vì vậy tôi cũng đã bao gồm các mô hình đó. Triển khai JAXB có các quy tắc mặc định để ánh xạ các tên trường/thuộc tính, nhưng vì tài liệu của bạn khác với trường mặc định, mỗi trường phải được chú thích.

MyResult

package forum11001458; 

import javax.xml.bind.annotation.*; 

@XmlRootElement(name="MyResult") 
public class MyResult { 

    @XmlElement(name="AccountID") 
    private String accountID; 

    @XmlElement(name="User") 
    private User user; 

    @XmlElement(name="Result") 
    private Result result; 

} 

tài

package forum11001458; 

import javax.xml.bind.annotation.XmlElement; 

public class User { 

    @XmlElement(name="Name") 
    private String name; 

    @XmlElement(name="Email") 
    private String email; 

} 

quả

package forum11001458; 

import javax.xml.bind.annotation.XmlElement; 

public class Result { 

    @XmlElement(name="Course") 
    private String course; 

    @XmlElement(name="Score") 
    private String score; 

} 

Tôi có thể sử dụng thư viện Json nào cho điều này?

Dưới đây là cách bạn có thể sử dụng để làm MOXY JSON binding:

jaxb.tính

Để sử dụng MOXY là nhà cung cấp JAXB của bạn, bạn cần phải bao gồm một tập tin gọi jaxb.properties với các mục sau đây trong gói tương tự như mô hình miền của bạn:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

Demo

Lưu ý cách Ràng buộc JSON của MOXy không yêu cầu bất kỳ phụ thuộc thời gian biên dịch nào. Tất cả các API cần thiết có sẵn trong Java SE 6. Bạn có thể thêm các API hỗ trợ cần thiết nếu bạn đang sử dụng Java SE 5.

package forum11001458; 

import java.io.File; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(MyResult.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     unmarshaller.setProperty("eclipselink.media-type", "application/json"); 
     File json = new File("src/forum11001458/input.json"); 
     Object myResult = unmarshaller.unmarshal(json); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty("eclipselink.media-type", "application/json"); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(myResult, System.out); 
    } 

} 

input.json/Output

{ 
    "MyResult" : { 
     "AccountID" : "12345", 
     "User" : { 
     "Name" : "blah blah", 
     "Email" : "[email protected]" 
     }, 
     "Result" : { 
     "Course" : "blah", 
     "Score" : "10.0" 
     } 
    } 
} 
7

Googles GSON là một thư viện thực sự tuyệt vời. This là từ liên kết trước và về cơ bản phác thảo một số chức năng của nó.

5

jackson cũng khá nhanh chóng và dễ dàng để sử dụng

+0

Cảm ơn bạn đã phản hồi. Nếu tôi thiết kế cái này ở Jackson, thì đối tượng Java của tôi trông như thế nào? – user238021

1

Mặc dù khép kín, this SO post có thể giúp bạn hiểu sự khác nhau giữa Jackson và GSON. Cái nào là "tốt nhất" phụ thuộc vào cái gì là quan trọng đối với bạn.

EDIT: Cụ thể cho Jackson, ví dụ của bạn trông rất giống ví dụ mà họ cung cấp cho những gì họ gọi là Ràng buộc dữ liệu đầy đủ, bạn có thể đọc nó here. Btw, mặc dù 5 phút thông báo cần thiết để đọc tài liệu đó có thể hơi ngắn, nó đưa ra một cái nhìn tổng quan đầy đủ về những cách khác nhau mà Jackson có thể được sử dụng. Bạn cũng sẽ nhận thấy rằng các ví dụ được đưa ra không sử dụng chú thích.

1

Hoặc GSON

Siêu dễ dàng (không có getters/settres, không cần chú thích hoặc cấu hình).

class BagOfPrimitives { 
    private int value1 = 1; 
    private String value2 = "abc"; 
    private transient int value3 = 3; 
} 

BagOfPrimitives obj = new BagOfPrimitives(); 
Gson gson = new Gson(); 
String json = gson.toJson(obj); 

==> json is {"value1":1,"value2":"abc"} 
+0

Tôi thấy bây giờ, @fvu đã nói về điều tương tự. dù sao. – ses

Các vấn đề liên quan