2012-12-17 150 views
4
一个简单的JSON响应

想象一下,一个简单的JSON响应,如:撰写Java中

{ 
    "success": false, 
    "message": "PEBKAC" 
} 

鉴于我有booleanString变量,什么将它们转换成JSON在Java中最简单的方式,而不诉诸String.format和朋友。

我更熟悉C#,其中这是一个相当简单的使用内置JavaScriptSerializer class

var success = false; 
var message = "PEBKAC"; 
var serializer = new JavaScriptSerializer(); 
var json = serializer.Serialize(new { success, message }); 

有什么这个简单的Java?

+0

可能重复[它是一种有效的方式在Java序列化JSON数据?](http://stackoverflow.com/questions/3147028/is-it-an-efficient-way-to-serialize-json-data-in-java) – 2012-12-17 11:55:02

+0

@RC,我不在乎效率。在这种情况下,我重视简单性。 –

+0

Dogbert在链接上的答案适合您的需求(imho) – 2012-12-17 12:13:06

回答

7

使用JSON
系列化

org.json.JSONObject obj = new org.json.JSONObject(); 
    obj.put("success", false); 
    obj.put("message", "PEBKAC"); 
    obj.toString(); 

反序列化

org.json.JSONObject obj = new org.json.JSONObject(responseAsString); 
obj.optBoolean("success"); // false 
obj.optString("message"); // PEBKAC 

google-gson

public class MyObject 
{ 
    private String message; 
    private boolean success; 
    public MyObject(String message, boolean success) 
    { 
     this.message = message; 
     this.success = success; 
    } 
} 

系列化

MyObject obj = new MyObject("PEBKAC", false); 
    new com.google.gson.Gson().toJSON(obj); 

反序列化

MyObject obj = new com.google.gson.Gson().fromJSON(responseAsString, MyObject.class); 
    obj.getMessage(); 
    obj.getSuccess(); 
+0

感谢代码示例。他们非常好地突出一些优雅的选项。我会检查'JSONObject',因为它看起来非常适合我的场景。 –

1

你看过gson吗?

http://code.google.com/p/google-gson/

//亨里克

+0

您能否提供一个示例来演示如何使用GSON实现在问题中列出的示例? –

+0

以下是指向GSON的推荐文档的链接: https://sites.google.com/site/gson/gson-user-guide#TOC-Primitives-实例 本节介绍如何利用这些对象。 – Hiny

0

看看谷歌的GSON。 Java库是否可以与JSON一起工作?

http://code.google.com/p/google-gson/

在这里,你有一些例子:

https://sites.google.com/site/gson/gson-user-guide#TOC-Primitives-Examples

UPDATE

就像@Ilya代码是在链接的例子。但是,这会是这样的:

对象:

public class MyObj 
{ 
    private String message; 
    private boolean success; 
    public MyObj(String message, boolean success) 
    { 
     this.message = message; 
     this.success = success; 
    } 
} 

翻译成JSON:

import com.google.gson.Gson; 

public class Main { 

    public static void main(String[] args) { 
     MyObj obj = new MyObj("PEBKAC",false); 
     Gson gson = new Gson(); 
     System.out.println(gson.toJson(obj)); 
    } 
} 

输出:

{"message":"PEBKAC","success":false} 
+0

你能否提供一个例子展示如何使用GSON实现在问题中列出的例子? –

+0

我用用户指南发布的链接为您提供了所有这些,并且解释了更多这个强大的库。包括直接将JSON响应转换为Java对象。 – lcguida

0

有很多简单的库来处理JSON在java,检查:JSON

在Java中没有内置支持

+0

我见过这个清单。然而,在这种情况下,它们中的许多比我需要的更复杂。 –

+0

你有没有试过http://www.json.org/java/index.html我试过了,发现很简单(只用了第7个类) –

1

有JSON解析器库可用,其中一个是Jackson(http://jackson.codehaus.org)。杰克逊的ObjecMapper类(http://jackson.codehaus.org/1.9.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html)为您提供了类似于C#中JavaScriptSerializer的功能。使用

+0

这个问题是关于串行化JSON,不解析它。请提供一个例子来证明这些库的使用非常简单。我在我的应用程序中的其他地方使用了Jackson进行解析,但是对于序列化,我还没有发现生成JSON的简单方法。 –

+1

StringWriter writer = new StringWriter(); jsonObjectMapper.writeValue(writer,obj)//其中jsonObjectMapper是ObjectMapper的一个实例,obj是要序列化的Java对象。 –