2011-11-15 33 views
12

Tôi có một mô hình như thế:Jackson Deserialize Variable như Json Chuỗi

private String message; 
private Integer errorCode;  
private String data; 

tôi nhận được một chuỗi JSON từ xa và tin nhắn, các biến errorCode được giá trị chính xác. Tuy nhiên tôi không muốn deserialize để biến dữ liệu của tôi. Tôi muốn nó là một chuỗi json giống như:

{"cat": "1.2.3.4", "ner": "80", "name": "pinta" } 

sau đó tôi sẽ deserialize nó để đối tượng bản thân mình. Làm thế nào tôi có thể làm điều đó?

PS: Để làm rõ câu hỏi:

tôi nhận được một chuỗi Json như thế:

{ "dữ liệu": { "mèo": "1.2.3.4", "ner": "80 ", "tên": "Pinta"}, "message": "m", "errorCode": 12}

Sau deserialization biến của tôi nên có mà giá trị:

message => "m" 
errorCode => 12 
data => "{"cat": "1.2.3.4", "ner": "80", "name": "pinta" }" 
+0

Bạn có thể làm rõ hơn không? – MByD

+0

@MByD Khi tôi gỡ lỗi biến sau khi deserialization tôi muốn thấy rằng biến dữ liệu của tôi có giá trị đó: '{" cat ":" 1.2.3.4 "," ner ":" 80 "," name ":" pinta "} 'bởi vì tôi gửi nó như thế:' "dữ liệu": {"cat": "1.2.3.4", "ner": "80", "name": "pinta"} ' – kamaci

+0

@MByD Tôi đã chỉnh sửa câu hỏi của mình. – kamaci

Trả lời

7

Jackson issue 596 là được tạo cho chức năng mong muốn được mô tả trong câu hỏi gốc. Bình chọn cho nó nếu bạn muốn nó thực hiện.

Giải pháp hiện tại có sẵn là triển khai quá trình xử lý deserialization tùy chỉnh.

Ngoài ra, chủ đề How can I include raw JSON in an object using Jackson? bao gồm chủ đề này.

7

Tôi thà khuyên bạn nên để dữ liệu bị ràng buộc với một đối tượng trung gian; thường là java.util.Map hoặc org.codehaus.jackson.JsonNode (Cây JSON). Và sau đó bạn có thể truy cập dữ liệu theo bất kỳ cách nào bạn muốn; bao gồm dễ dàng chuyển đổi sang POJO bằng cách sử dụng ObjectMapper.convertValue(inputPojo, outputType)).

+0

cảm ơn câu trả lời của bạn và bỏ phiếu. Chỉ muốn làm cho nó rõ ràng: tôi sử dụng 'myObject = mapper.readValue (dữ liệu, clz);' sự khác biệt giữa 'transferObject = mapper.convertValue (dữ liệu, clz);' là gì? – kamaci

+0

readValue() phân tích nội dung từ nguồn đã cho, trong khi hàm convertValue() tương đương với giá trị ghi, đọc nó như kiểu đã cho - nó có thể chuyển đổi bất kỳ thứ gì có thể được tuần tự hóa thành JSON, thành bất kỳ thứ gì có thể bị ràng buộc từ JSON. – StaxMan

+0

+1 Câu trả lời hay nhất cho vấn đề này. Việc giữ kiểu như JsonNode làm cho nó có thể chỉ gọi toString() và nhận giá trị json String. Tất nhiên nó đầu tiên được deserialized, và sau đó serialized một lần nữa, đó là một chút lãng phí, nhưng cho đến nay, đây là cách duy nhất để làm điều đó tốt đẹp và sạch sẽ – Rasive

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