2014-01-24 54 views
0

我試圖實現一個簡單的命令行Java應用程序,它從RESTful web服務請求一些資源。有沒有辦法將JSON響應自動反序列化到我的模型類中?如何從RESTful webservice反序列化JSON響應?

在Objective-C中有Key-Value-Coding,它允許你通過它們的字符串表示來創建對象,訪問變量和方法。這可以用來將XML或JSON文檔自動反序列化爲對象,這可以通過一些第三方庫來完成,如RestKit。

Java是否有類似的東西?我知道我可以使用JSON解析器來獲取文檔的數組和地圖表示,然後自己創建我的模型對象,但是我想知道這是否可以自動化?

我昨天整個晚上都在搜索圖書館,教程和用戶指南。他們都在解釋如何構建一個RESTful Web服務,或者如果它是一個客戶端應用程序,他們所做的只是下載一些JSON並將其打印到系統中。

+0

這裏有一個樣品關於使用反序列化JSON字符串傑克遜:http://www.mkyong.com/java/how-to-convert-java-object-to -from-JSON-傑克遜/。如果您使用其他框架(如Spring或Mule)(或者另一個可以自動爲您執行的框架*),則可以將其自動化。否則,你應該更詳細地解釋你確切的問題。 –

+0

另一個流行的是[GSON](http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html),還有[更多](http://stackoverflow.com/questions/338586/a-better-java-json-library) – zapl

+0

很多Java人甚至不知道如何處理JSON「原始」 - 他們只知道這些框架。 –

回答

1

查找到Jackson

有了這個,你可以創建一個「匹配」您的JSON數據結構類和傑克遜將自動實例化和填充類爲您服務。然後,您已經與Java應用程序的其餘部分進行了集成。

1

這裏一個例子,使用的XStream庫:(http://x-stream.github.io/json-tutorial.html

package com.thoughtworks.xstream.json.test; 

import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; 

public class ReadTest { 

    public static void main(String[] args) { 
     String json = "{\"product\":{\"name\":\"Banana\",\"id\":123" 
      + ",\"price\":23.0}}"; 

     XStream xstream = new XStream(new JettisonMappedXmlDriver()); 
     xstream.alias("product", Product.class); 
     Product product = (Product)xstream.fromXML(json); 
     System.out.println(product.getName()); 
    } 

}